Dplyr的tbl_df在逐字符串选择时会出现意外行为

时间:2015-01-30 07:39:33

标签: r dplyr

通常,当以编程方式使用dplyr时,我想要按名称选择列,其中列名称作为字符串存储在某个变量中。

我注意到尝试使用dplyr执行此操作通常会导致意外结果。这似乎是tbl_df处理方式的结果。

以下是一些例子:

## regular data frame:
df = data.frame(subject = 1:3, resp = c(2,3,3))   # example dataframe
response_column = "resp"                     # I want to select the contents of a column with a string                       

# for loop over unique values:
unique_responses = unique(df[,response_column])
for (resp in unique_responses) {
  cat("\nA response:", resp)
}

# convert column type:
df[,response_column] = as.character(df[,response_column])
str(df) # modified the column

所以这些是我过去常常做的事情。访问列的内容,转换它们并重新分配它们,获取它们的唯一值等等。

但是当data.frame有类tbl_df和tbl时,事情也不行。

## with tbl_df and tbl 
require(dplyr)
df = data.frame(subject = 1:3, resp = c(2,3,3))
class(df) = c("tbl_df","tbl", class(df))
class(df)
df[,response_column] 

# for loop doesn't seem to know what to do with this:
unique_responses = unique(df[,response_column])
for (resp in unique_responses) {
  cat("\nA response:", resp)
}

# as.character seems to concatenate the entire column into one string!
df[,response_column] = as.character(df[,response_column])
df

我不知道该怎么做这个行为(即故意与bug),或者一般来说,最佳实践是能够在正常数据帧和dplyr之间使用相同(编程)代码数据框。

0 个答案:

没有答案