【问题标题】:How do I use ColSums如何使用 ColSums
【发布时间】:2017-11-22 03:10:48
【问题描述】:
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))) 中的错误: 'x' 必须是至少有两个维度的数组 另外:警告信息: 在 is.data.frame(x) 中:强制引入的 NAs

发生了什么事?

【问题讨论】:

  • 如果列是factor,请使用lapply 执行此操作lapply(df1, function(x) as.numeric(as.character(x)))
  • 是那些因素吗?? - 奇怪
  • 你试过 colSums (x, na.rm = FALSE) 吗?

标签: r dataframe sum


【解决方案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,分配@987654335 @到原始数据集的维度,得到colSums

colSums(`dim<-`(as.numeric(as.matrix(df1)), dim(df1)), na.rm = TRUE)

【讨论】:

  • @Sotos 是的,你是对的。我一定把它误认为是卑鄙的。
  • 奇怪的是,只有数字的数据框被转换为因子。以前没见过
  • @Sotos 如果您查看最后一行,在某些情况下,它是空白的。大概就是这个原因。也许OP可以提到read.csv("file.csv", na.strings= "")
  • 所以我删除了我的答案。但我没有看到您在原始问题中看到因素问题的地方?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多