【问题标题】:How to replace vectors with their sums in a dataframe?如何用数据框中的总和替换向量?
【发布时间】:2020-08-08 01:12:03
【问题描述】:

在使用 pivot.wider() 函数后,我有一个 dataframe 有数百列和 30 行。而不是向量/数组,我想用它们的总和替换它们,用 0 替换 NULL 值。我唯一能想到的是遍历整个数据集并使用 sum() 函数,我已经尝试过代码如下。

for (i in 1:ncol(df))
{
  if is.character(df[,i]) == FALSE
  {
    df[,i] <- sum(df[,i])
  }
}

尽管使用了 if 语句,但我仍然收到“无效的‘类型’(字符)参数”错误。我对 R 完全陌生,因此不胜感激!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    问题是在使用pivot_wider 时,存在重复元素,如果我们不指定values_fn,它将返回list。一个选项是再次重新运行pivot_wider 并指定values_fn

    library(dplyr)
    library(tidyr)
    mtcars %>% 
         select(gear, mpg, disp) %>% 
         pivot_wider(names_from = gear, values_from = c(mpg, disp), 
               values_fn = list(mpg = ~ sum(., na.rm = TRUE),
                     disp = ~ sum(.,  na.rm = TRUE)))
    

    【讨论】:

    • 感谢您的快速回复!我仍然有点不确定 values_fn 是什么;是否有导致问题的重复列?如何确定我应该将 values_fn 设置为什么?
    • @kiyuhi 你能把你原来的pivot_wider代码给我看一下吗
    • wideDf
    • @kiyuhi 在这种情况下,你需要values_fn = list(individualCount = ~sum(., na.rm = TRUE))
    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多