Data Manipulation,循环添加列

时间:2013-05-10 04:02:10

标签: r

我在没有任何帮助的情况下几次问过这个问题。我已经改进了代码,所以我希望有人有一些想法!我有一个完整的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 

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即可。