-1

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

1 回答 1

0

apply()您将 MARGIN 设置为 2,即列。将 MARGIN 参数设置为 1,以便您的函数 sum 将跨行应用。@sgibb 提到了这一点。

如果这不起作用(无法重现示例),您可以尝试首先将矩阵的元素转换为 integers X2 <- apply(sibling, c(1,2), function(x) x==174),然后使用 rowSums 将每行中的列相加:Xsum <- rowSums(X2, na.rm=TRUE)。使用此设置,您无需先将 NA 更改为 0,因为您可以使用na.rm参数处理 NArowSums()

于 2013-05-10T04:42:21.903 回答