【问题标题】:Adding new column to dataframe (R) with a rowsum [closed]使用行和向数据框(R)添加新列[关闭]
【发布时间】:2021-10-18 15:11:20
【问题描述】:

编辑:讲师建议在我们进入数据分析时使用 Stack Overflow 来寻求社区支持并利用社区。我是一名成熟的学生,这是一次职业转型的尝试。我的目标是学习,大家都很棒 - 感谢您的帮助 这是我的第一个任务,我正在尝试自己完成它 - 但我遇到了障碍

我有一个数据框 CrimeDataTheft。它的列主要是数字和一个字符。 我正在尝试创建一个名为 Country Totals 的新列,它将是行数字数据(如下所示)的总和。我没有包含 Country 列,因为它是一个字符列。

我将带有 sum 变量的新旧列放在名为 SumCrimeData 的数据框中

SumCrimeData <- CrimeDataTheft$Country.Totals = rowsum(CrimeDataTheft[,c(Intentional.homicide, 
                   Attempted.intentional.homicide, Assault, Kidnapping, Sexual.violence
                   , Robbery, Unlawful.acts.involving.controlled.drugs.or.precursors)], na.rm = TRUE)

我得到的错误是

Error in `[.data.frame`(CrimeDataTheft, , c(Intentional.homicide, Attempted.intentional.homicide,  : 
  object 'Intentional.homicide' not found

我正在从 csv 中提取数据,并且名称被完全复制。有人可以指出我要去哪里错了吗?谢谢!!

dput(head(CrimeDataTheft, 5)) 
structure(list(Country = c("Albania", "Austria", "Belgium", "Bosnia and Herzegovina", 
"Bulgaria"), Intentional.homicide = c(2.03, 0.84, 1.27, NA, 1.14
), Attempted.intentional.homicide = c(3.25, 1.93, 8.87, NA, 0.54
), Assault = c(5.52, 43.29, 556.36, NA, 39.54), Kidnapping = c(0.14, 
0.07, NA, NA, 1.03), Sexual.violence = c(5.38, 50.9, 77.45, NA, 
8.64), Robbery = c(3.42, 29.67, 140.14, NA, 16.9), Unlawful.acts.involving.controlled.drugs.or.precursors = c(70.26, 
494.05, 547.74, NA, 78.14), Country.Totals = c(90, 620.75, 1331.83, 
0, 145.93), Country.Totals.per.000s = c(90, 620.75, 1331.83, 
0, 145.93)), row.names = c(NA, 5L), class = "data.frame")

【问题讨论】:

  • 您需要将列名放在引号内
  • 谢谢你 - 你让我前进 - 现在的错误是关于“组”我不了解与我的数据相关的基本级别的组。错误现在显示为 ``` Error in rowsum.data.frame(CrimeDataTheft[, c("Intentional.homicide", : argument "group" is missing, with no default ``
  • 如果您使用dput 提供数据示例而不是发布错误,可能会更容易。这将使我们能够在发布建议之前对其进行测试
  • 好的,要查找 dput 并在这里使用它 - 干杯
  • 请不要截断,我们需要查看所有内容,以便重新创建您的数据集。尝试dput(head(df, 5)) 显示使输出更小。将 df 更改为您的数据框的名称

标签: r dataframe rowsum


【解决方案1】:

根据您在评论中提到的内容,您似乎没有SumCrimeData 数据框。如果您决定使用rowSums 而不是rowsum,则需要创建SumCrimeData 数据框。

应该对您选择的行求和并创建一个名为Country.Totals的新列

CrimeDataTheft$Country.Totals <- rowSums(CrimeDataTheft[,c("Intentional.homicide","Attempted.intentional.homicide", "Assault", "Kidnapping", "Sexual.violence","Robbery", "Unlawful.acts.involving.controlled.drugs.or.precursors")], na.rm = TRUE)

然后您可以通过执行以下操作来创建新的数据框

SumCrimeData <- as.data.frame(CrimeDataTheft$Country.Totals)

或者如果你不希望它作为数据框,你可以这样做

SumCrimeData <- CrimeDataTheft$Country.Totals

我不确定您是否可以像您在问题中显示的那样在同一步骤中创建一个新列和一个新数据框,即SumCrimeData &lt;- CrimeDataTheft$Country.Totals = rowsum(...)

【讨论】:

    【解决方案2】:

    rowsum() 函数用于分组计算。改用 rowSums() 函数来做你想做的事,在变量名上加上引号以避免你的第一个错误

    【讨论】:

    • 太棒了!!谢谢你。对此真的很抱歉,但它现在告诉我没有找到新的数据框 SumCrimeData。是否无法按照我在上面添加的方式创建数据框? SumCrimeData
    猜你喜欢
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    相关资源
    最近更新 更多