给出以下数据框:
col_1 <- c(1, NA, 2, 3)
col_2 <- c(2, 1, 1, 2)
col_3 <- c(3, 2, 3, NA)
df <- data.frame(value_1, value_2, value_3)
col_1 col_2 col_3
1 2 3
NA 1 2
2 1 3
3 2 NA
我想做这样的事情:如果df [1,1],df [1,2]和df [1,3]中存在数据,则将该行标记为1.否则将其标记为0因此,你可以得到这样的东西:
col_1 col_2 col_3 col_4
1 2 3 1
NA 1 2 0
2 1 3 1
3 2 NA 0
或许,也许我有这个df:
col_1 <- c(1, NA, 2, 3)
col_2 <- c(NA, 1, 1, NA)
col_3 <- c(3, 2, 3, NA)
df <- data.frame(col_1, col_2, col_3)
col_1 col_2 col_3
1 NA 3
NA 1 2
2 1 3
3 NA NA
我想创建一个变量,如果col_1和col_3中存在值,我将赋值为1.否则我指定0.所以它看起来像这样:
col_1 col_2 col_3 col_4
1 NA 3 1
NA 1 2 0
NA 1 3 0
3 NA NA 0
我将如何完成此任务?
答案 0 :(得分:1)
我们可以对数据列的子集或整个数据集
使用rowSums
df$col_4 <- as.integer(rowSums(!is.na(df[c(1, 3)]))==2)
另一个选项是Reduce
整个数据集
df$col_4 <- as.integer(!Reduce(`|`, lapply(df, is.na)))
或列的子集
df$col_4 <- as.integer(!Reduce(`|`, lapply(df[c(1, 3)], is.na)))
df$col_4
#[1] 1 0 0 0