如何对包含空格的dataframe列进行算术运算

如何对包含空格的dataframe列进行算术运算,r,arithmetic-expressions,R,Arithmetic Expressions,我这里有一个数据框,我想创建一个新列,它是一列除以另一列的商 首先,我尝试: df$new_column_name <- df$dividend column / df$divisor column df$new\u column\u name正如joran在评论中提到的,在列名中使用空格确实是不可取的。它会导致很多头痛。听起来你的列不是数字。您可以使用str查看您拥有的列的类型。下面是一个使用tidyverse软件包解决您的问题的可能方法的示例,我强烈建议您查看该软件包 library

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

首先,我尝试:

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

df$new\u column\u name正如joran在评论中提到的,在列名中使用空格确实是不可取的。它会导致很多头痛。听起来你的列不是数字。您可以使用
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
库(tidyverse)
#创建列名中带有空格的数据框
df“data.frame”:5个obs。共有2个变量:
#>$股息栏:整数1 2 3 4 5
#>$divisor列:int 6 7 8 9 10
#使用set_tidy_names将列名中的空格替换为“.”
#将列更改为数值
#使用dplyr::mutate创建新列
df%
将变量(c(“被除数列”、“除数列”))变为.numeric)%>%
mutate(new_column_name=divident.column/divisior.column)
#>新名称:
#>股息列->股息.column
#>除数列->除数.column

请共享您的数据。如果它们是ColName中的注释,则必须使用反勾号。尝试在控制台中键入
df$
,然后按查看我的意思。这里的一般要点是:(1)不要在列名中使用空格,(2)使用字符串选择列,或者如果名称中有空格之类的“坏”字,
$
是一个糟糕的选择,而应该使用
df[[“股息列”]]
。我想应该是抽搐。但请务必使用
dput()
共享数据以给出详细答案
df$new\u column\u name添加数据框的示例,
df
,否则您的问题可能会被关闭。
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