我如何使用ColSums

时间:2017-06-19 19:24:01

标签: r dataframe sum

G1G2Effect  WEIGHT2    Sim1    Sim2    Sim3    Sim4    Sim5    Sim6    Sim7    Sim8    Sim9   Sim10   Sim11   Sim12
1    -0.0312 2.833103 -0.0312 -0.0312  0.0000 -0.0312  0.0312  0.0000 -0.0312 -0.0312 -0.0312 -0.0312  0.0000 -0.0312
2    -0.0640 2.536790  0.0000 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640
3     0.0420 3.309074  0.0420  0.0000  0.0000  0.0420  0.0420  0.0420  0.0420  0.0420  0.0420  0.0420  0.0420  0.0000
4     0.0332 2.476224  0.0332  0.0332  0.0332  0.0332  0.0332  0.0000  0.0332  0.0332  0.0332  0.0332 -0.0332  0.0332
5     0.0000 2.265289  0.0302  0.0302  0.0302  0.0000  0.0302  0.0000  0.0302 -0.0302  0.0302  0.0000  0.0302  0.0000
6     0.0000 1.272609  0.0116  0.0000  0.0000  0.0116  0.0000 -0.0116  0.0032 -0.0102  0.0101 

我有上面的data.frame ^。我正在尝试创建一个新的data.frame,它只是每列的总和。

df2 <- colSums(as.numeric(as.character(df1)))

但我收到错误消息

  

colSums中的错误(as.numeric(as.character(exam))):     &#39; X&#39;必须是至少两个维度的数组   另外:警告信息:   在is.data.frame(x)中:由强制引入的NA

发生了什么事?

1 个答案:

答案 0 :(得分:1)

as.numeric/as.character适用于vector/matrix而非data.frame。我们需要遍历数据集并将其转换为numeric,然后应用sum

sapply(df1, function(x) sum(as.numeric(as.character(x)), na.rm = TRUE))

我们也可以使用tidyverse

执行此操作
library(tidyverse)
df1 %>%
    mutate_all(funs(sum(as.numeric(as.character(.)), na.rm = TRUE)))

如果我们确实需要colSums,则可以选择将data.frame转换为matrix,以便factor类转换为character,然后更改将其numeric分配给原始数据集的维度并获取dim

colSums