通常,当以编程方式使用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之间使用相同(编程)代码数据框。