【问题标题】:How to do arithmetic with dataframe columns that contain spaces如何对包含空格的数据框列进行算术运算
【发布时间】:2019-02-06 21:09:07
【问题描述】:

我在这里有一个数据框,想创建一个新列,它是一列除以另一列的商。

首先,我试过了:

df$new_column_name <- df$dividend column / df$divisor column

当我以这种方式格式化时,我收到错误:

“错误:df$dividend 列/df$divisor 列中出现意外符号”

我也试过了:

df$new_column_name <- df$"dividend column" / df$"divisor column"

这里我得到了错误:

“二元运算符的非数字参数”

用于数学计算的两列在名称中都有空格,如果这会有所不同的话。

【问题讨论】:

  • 请分享您的数据。
  • 如果它们是 colnames 中的 cmets,那么您必须使用反引号。尝试在控制台中输入df$,然后按 看看我的意思。
  • 这里归零的一般要点是(1)不要在列名中使用空格,以及(2)使用字符串选择列,或者如果名称中有“坏”的东西它喜欢空格,$ 是一个糟糕的选择,而是使用df[["dividend column"]]
  • 我认为 back-tics 应该可以解决问题。但请务必使用dput() 分享数据以给出详细答案。 df$new_column_name &lt;- df$`dividend column` / df$`divisor column`
  • 添加您的数据框示例df,否则您的问题可能会被关闭。

标签: r arithmetic-expressions


【解决方案1】:

正如 joran 在 cmets 中提到的,确实不建议在列名中包含空格。它会导致很多头痛。听起来您的列不是数字。您可以使用str 查看您拥有的列类型。下面是一个示例,它可以使用 tidyverse 包解决您的问题,我强烈建议您检查一下。

library(tidyverse)

# create data frame with space in column names
df <- data.frame("dividend column" = 1:5, "divisor column" = 6:10, check.names = FALSE)

# use str to get the classes of each column
str(df)
#> 'data.frame':    5 obs. of  2 variables:
#>  $ dividend column: int  1 2 3 4 5
#>  $ divisor column : int  6 7 8 9 10

# use set_tidy_names to replace space in column names with '.'
# change columns to numeric values
# use dplyr::mutate to create the new column
df <- set_tidy_names(df, syntactic = TRUE) %>% 
  mutate_at(vars(c("dividend.column", "divisor.column")), as.numeric) %>% 
  mutate(new_column_name = dividend.column/divisor.column)
#> New names:
#> dividend column -> dividend.column
#> divisor column -> divisor.column

【讨论】:

    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多