我有一些数据正在尝试在 R 中进行转换。但是当我运行代码时,出现“无法对不存在的列进行子集化”错误。我的数据目前看起来像这样,但是,有数百个不同的标题,而不仅仅是下面我的简化数据所示的三个。
ID Title Training_Time Percent_Complete
1 New 1 100
1 Hazmat 5 100
1 Management 12 100
我希望它看起来像这样,如果可能的话还包括完成百分比列,尽管我可以只需要完成培训所需的天数,如下所示。
ID Training_New Training_Hazmat Training_Managerment
1 1 5 12
根据 stackoverflow 对类似问题的回答,我尝试了以下代码的几个不同版本。
LMS_df <- LMS_df %>%
tidyr::pivot_wider(-ID,
names_from = LMS_df$Title,
values_from = LMS_df$Training_Time
)
关于消除此错误有什么建议吗?我是否需要为数据集中的每个训练标题创建新列?
最佳答案
这里是来自原始发布者提供的数据的一个可重现的小示例。不需要美元语法中的数据框名称(即 LMS_df$
)。如果没有,到目前为止它仍然有效。可以使用 names_prefix = "Training_"
添加名称前缀:
library(dplyr)
library(tidyr)
df <- tribble(
~ID, ~Title, ~Training_Time, ~Percent_Complete,
1, "New", 1, 100,
1, "Hazmat", 5, 100,
1, "Management", 12, 100
)
df %>%
pivot_wider(-ID,
names_from = Title,
values_from = Training_Time,
names_prefix = "Training_"
)
#> # A tibble: 1 × 4
#> Percent_Complete Training_New Training_Hazmat Training_Management
#> <dbl> <dbl> <dbl> <dbl>
#> 1 100 1 5 12
创建于 2023-03-09 reprex v2.0.2
最后一点:这是一种特殊情况,因为所有 Title
的 Percent_Complete
都等于 100。否则,您将获得每个百分比的单独行以及所有不匹配情况的 NA
。
关于r - ivot_wider 导致 "! Can' t 不存在的子集列。“R 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75688107/