【发布时间】:2020-10-15 16:43:38
【问题描述】:
在我的数据框中创建一个 > 900,000 行的新列,我希望将值作为该列
-
NA如果 任何 列中的值是NA
df$newcol[is.na(df$somecol_1) | is.na(df$somecol_2) | is.na(df$somecol_3)] <- NA
-
0如果一组列中的所有值都是0
df$newcol[df$somecol_1==0 & df$somecol_2==0 & df$somecol_3==0] <- 0
-
1如果一组列中的任何个值是1,而没有一个是NA。这是棘手的部分,因为它与我的 10 列创建了无数的组合。整个数据框有 >50 列,其中我有 10 列对此过程感兴趣,这里我只展示三个:
df$newcol[df$somecol_1==1 & df$somecol_2==0 & df$somecol_3==0] <- 1
df$newcol[df$somecol_1==1 & df$somecol_2==1 & df$somecol_3==0] <- 1
df$newcol[df$somecol_1==1 & df$somecol_2==1 & df$somecol_3==1] <- 1
df$newcol[df$somecol_1==0 & df$somecol_2==1 & df$somecol_3==0] <- 1
df$newcol[df$somecol_1==0 & df$somecol_2==1 & df$somecol_3==1] <- 1
df$newcol[df$somecol_1==0 & df$somecol_2==0 & df$somecol_3==1] <- 1
df$newcol[df$somecol_1==1 & df$somecol_2==0 & df$somecol_3==1] <- 1
我觉得我想多了,一定有办法让 3 更容易吗?如上所示,编写不同的列组合将永远花费十个。由于数据集很大,循环会变得太慢。
虚拟数据:
df <- NULL
df$somecol_1 <- c(1,0,0,NA,0,1,0,NA,1,1)
df$somecol_2 <- c(NA,1,0,0,0,1,0,NA,0,0)
df$somecol_3 <- c(0,0,0,0,0,0,0,0,0,0)
df <- as.data.frame(df)
基于以上,我希望新列是
df$newcol <- c(NA,1,0,NA,0,1,0,NA,1,1)
【问题讨论】:
-
您的虚拟数据不起作用。你永远不会创建
df,somecol_3有 11 个值,而其他的有 10 个。 -
抱歉,已编辑
标签: r