问题描述
有人可以帮忙吗?
x <- data.frame(A = c(NA,'1','0','0'),B = c('0',NA),C = c('1',NA,NA))
_ x1 x2 x3 x4 x5 x6
A NA 1 0 0 1 2
B 0 0 0 NA 0 3
C 1 NA NA NA 1 0
谢谢
解决方法
也许您可以尝试下面的代码
setNames(
cbind(
data.frame(t(x)),t(sapply(x,function(v) table(factor(na.omit(v),levels = c(1,0)))))
),paste0("x",1:6)
)
给出
x1 x2 x3 x4 x5 x6
A <NA> 1 0 0 1 2
B 0 0 0 <NA> 0 3
C 1 <NA> <NA> <NA> 1 0
,
我注意到您仍在对此进行评论。 @ThomasIsCoding的答案很好,但以防万一,这是您也可以考虑的另一种分步方法。
首先,转置您的数据框(我们称为df
):
df <- as.data.frame(t(x))
df
V1 V2 V3 V4
A <NA> 1 0 0
B 0 0 0 <NA>
C 1 <NA> <NA> <NA>
现在对于另外2列,使用rowSums
来汇总“ 1”和“ 0”的值。给定数据中na.rm = TRUE
的存在,您需要NA
。值1:4
代表前四列。
df$V5 <- rowSums(df[,1:4] == "1",na.rm = T)
df$V6 <- rowSums(df[,1:4] == "0",na.rm = T)
df
输出
V1 V2 V3 V4 V5 V6
A <NA> 1 0 0 1 2
B 0 0 0 <NA> 0 3
C 1 <NA> <NA> <NA> 1 0