我在没有任何帮助的情况下几次问过这个问题。我已经改进了代码,所以我希望有人有一些想法!我有一个完整的0和1的数据集。我只想将10列添加到一起,得到1列,3835行。到目前为止,这是我的代码:
# select for valid IDs
data = history[history$studyid %in% valid$studyid,]
sibling = data[,c('b16aa','b16ba','b16ca','b16da','b16ea','b16fa','b16ga','b16ha','b16ia','b16ja')]
# replace all NA values by 0
sibling[is.na(sibling)] <- 0
# loop over all columns and count the number of 174
apply(sibling, 2, function(x) sum(x==174))
问题是这段代码将所有行加在一起,我想将所有列加在一起,所以我会得到1列。这就是我现在得到的答案,这是错误的:
b16aa b16ba b16ca b16da b16ea b16fa b16ga b16ha b16ia b16ja
68 36 22 18 9 5 6 5 4 1
答案 0 :(得分:0)
在apply()
中,您将MARGIN设置为2,即列。将MARGIN参数设置为1,这样您的函数sum将跨行应用。这是@sgibb提到的。
如果这不起作用(无法重现示例),您可以尝试首先将矩阵的元素转换为整数X2 <- apply(sibling, c(1,2), function(x) x==174)
,然后使用rowSums将每行中的列相加:{{ 1}}。使用此设置,您无需先将NA更改为0,因为您只需使用Xsum <- rowSums(X2, na.rm=TRUE)
中的na.rm
参数处理NA即可。