在R中,我有以下两个数据帧(Df1和Df2)——它们是我刚刚制作的例子——我打算根据以下规则创建一个虚拟变量:对于Df1中的每个id,如果这个观察id的年份更高或等于Df2中年份的观测id,则虚拟值为1,否则为0。数据帧Df3是我希望实现的结果。我怎么能做到呢?Df1
Df2
Df3
一些背景:
我尝试为我正在处理的真实数据帧创建两个循环。下面是我尝试过的代码。数据帧称为data_school,我的id、年和虚拟变量分别是id_escola、ano和internet_fixa。我做了我的两个初始数据帧之间的完全连接,结果我得到了data_school。因为它是多对一连接,所以我创建了虚拟变量,只有精确匹配的值等于1,其他都是NA。然后我继续做下面的循环,首先迭代所有id,获取每个id,虚拟的参考年份,然后迭代该id的每个唯一年份,并根据规则替换它。对于第一行,它工作得很好,但是在一些行之后,它会得到以下错误“如果(data_school[data_school$id_escola==id错误
for (id in unique(data_school$id_escola)) {
current_subset <- subset(data_school, id_escola == id & is.na(internet_fixa) == F)
year_implementation <- current_subset$ano
current <- subset(data_school, id_escola == id)
for (i in unique(current$ano)){
if (data_school[data_school$id_escola == id & data_school$ano == i,]$ano < year_implementation) {
data_school[data_school$id_escola == id & data_school$ano == i, "internet_fixa"] <- 0
} else {
data_school[data_school$id_escola == id & data_school$ano == i, "internet_fixa"] <- 1
}
}
}
附言:如果你愿意,如果最后一部分不够清楚,你可以忽略它(一些上下文)。
我们可以使用带有数据的连接。表
library(data.table)
setDT(df1)[df2, dummy := +(year >= i.year), on = .(id)]
-输出
> df1
id year x1 dummy
1: 1 2017 0.30 0
2: 1 2018 0.50 0
3: 1 2019 0.45 1
4: 1 2020 0.50 1
5: 1 2021 0.60 1
df1 <- structure(list(id = c(1L, 1L, 1L, 1L, 1L), year = 2017:2021,
x1 = c(0.3, 0.5, 0.45, 0.5, 0.6)), class = "data.frame", row.names = c(NA,
-5L))
df2 <- structure(list(id = 1:2, year = 2019:2020),
class = "data.frame", row.names = c(NA,
-2L))
这是否工作:
library(dplyr)
df2 %>% rename('df2_year' = year) %>% left_join(df1, by = 'id') %>% group_by(id) %>% mutate(dummy = if_else(year >= df2_year, 1, 0)) %>% select(-df2_year)
# A tibble: 6 x 4
# Groups: id [2]
id year x1 dummy
<int> <int> <dbl> <dbl>
1 1 2017 0.3 0
2 1 2018 0.5 0
3 1 2019 0.45 1
4 1 2020 0.5 1
5 1 2021 0.6 1
6 2 NA NA NA
使用的数据:
df1
id year x1
1 1 2017 0.30
2 1 2018 0.50
3 1 2019 0.45
4 1 2020 0.50
5 1 2021 0.60
df2
id year
1 1 2019
2 2 2020
我正在改装一些现有代码以使用Spark。我有多个包含不同数据集的数据帧。在转换主数据帧(或主数据集)时,我需要使用来自其他数据帧的数据来完成转换。我还有一种情况(至少在当前结构中),我需要在另一个数据帧的转换函数中创建新的数据帧。 我试图确定以下内容: 我可以在另一个数据帧的转换函数中访问数据帧吗 关于如何处理这种情况的指针将非常有帮助。
我有两个数据帧,它们的列名相同,但行数不同。第一个数据帧(a)看起来与此类似: 注:站点5、6、8和12故意丢失。 第二个数据帧(b)看起来像这样: 我想要实现的是: 在那里我注入(我肯定有一个更好的术语)数据帧b到数据帧a的数据,但是我想用零替换b中的任何NAs,并保持a中的NAs不变。 我发现并尝试了这个代码: 但它会带来NAs。我考虑先将NAs替换为零,但即使如此,它也会抹去我目前在数据帧a
我相信这很简单,但找不到答案。我有一个数据帧df: 然后,我有另一个较小的数据框,其中包含单元格引用(行号和列号),引用df中应为空的特定单元格(即NA): 我如何用NA替换df中所有由cellRefs中的行和列引用引用的单元格?
我有两个数据帧,它们共享多个公共列,如下所示: 第一个: 而第二个: 我想保留中的行,其列也存在于中。例如,df2的第27行有值,对于,这些值并不都存在于(因为df1只对列有值
我得到了一个具有多个列和行的数据帧df1。简单的例子: 我想创建一个空的数据框df2,然后再添加新的列和计算结果。 此时,我的代码如下所示: …添加两个新列: 有没有更好/更安全/更快的方法?是否可以创建一个空数据帧df2,并且只从df1复制索引?
我有两个Pandas Dataframe和,其中是的一部分,我想创建一个Dataframe,其中包含中的code>。 以下是一个例子: 注: 我的DataFrame可能有多个列,但是必须仅在列上进行匹配。