R 中的数据管理

Data Management in R

所以我有这段代码,我试图将名为 grade prek-12 的单独列合并到一个名为 Grade 的列中。我使用了 tidyr 包并使用这行代码来执行上述任务:

unite(dta, "Grade",
          c(Gradeprek, 
            dta$Gradek, dta$Grade1, dta$Grade2,
            dta$Grade3, dta$Grade4, dta$Grade5,
            dta$Grade6, dta$Grade7, dta$Grade8,
            dta$Grade9, dta$Grade10, dta$Grade11,
            dta$Grade12),
      sep="")

但是,我一直收到这样的错误消息:

error: All select() inputs must resolve to integer column positions. The following do not: * c(Gradeprek, dta$Gradek, dta$Grade1, dta$Grade2, dta$Grade3, dta$Grade4, dta$Grade5, dta$Grade6, ...

Penny,感谢您对我如何解决这个问题的看法。

您正在混合和匹配 uniteunite_ 的两个语法选项 - 您需要选择一个并坚持使用。在这两种情况下,都不要使用 data$column - 它们采用数据参数,因此您无需重新指定列来自哪个数据框。

选项 1:NSE 默认的非标准评估意味着裸列名称 - 没有引号!没有 c()

unite(dta, Grade, Gradeprek, Gradek, Grade1, Grade2, Grade3, ..., 
    Grade12, sep = "")

您可以使用一些技巧。例如,如果您的所有 Grade 列在您的数据框中都按此顺序彼此相邻,您可以执行

unite(dta, Grade, Gradeprek:Grade12, sep = "")

您还可以使用 starts_with("Grade") 获取所有以该字符串开头的列。有关详细信息,请参阅 ?unite 及其 link 至 ?select

选项 2:标准评估 您可以使用 unite_() 作为标准评估替代方案,该替代方案需要字符向量中的列名。在这种情况下,这样做的好处是让您可以使用 paste() 按照您想要的顺序构建列名:

unite_(dta, col = "Grade", c("Gradeprek", "Gradek", paste0("Grade", 1:12)), sep = "")