r - 将一列变量和一列值分成 r 中的各个组成部分

标签 r list dataframe dplyr tidyr

我有以下数据框(df),其中对于每个参与者,“成绩”列是通过将分数粘贴到某些项目上而构建的。例如,参与者“1”在一项项目“a”上获得了 4 分,在项目“b”上获得了 7 分,在项目“c”上获得了 8 分。 (请注意,成绩是一个字符)。另请注意,参与者“2”只有两个分数(假设这是与参与者“1”不同的考试)。

df = data.frame(participants = c(1, 1, 2),
                variables = c('abc', 'ef', 'abc'),
                grades= c('478', '58', '942'),
                stringsAsFactors = FALSE)


 participants variables grades
1            1       abc    478
2            1        ef     58
3            2       abc    942

(我的数据包含 100,000 行,如上所示。)

我想将数据转换成整洁的样式,如下:

  participants variables grades
1            1         a      4
2            1         b      7
3            1         c      8
4            1         e      5
5            1         f      8
6            2         a      9
7            2         b      4
8            2         c      2

这是我所做的

variables =  lapply(X=1:length(df$variables), FUN=function(X) {
  strsplit(df$variables[X], "") %>% .[[1]]}) %>% reduce(c)

grades =  lapply(X=1:length(df$grades), FUN=function(X) {
  strsplit(df$grades[X], "") %>% .[[1]]}) %>% reduce(c)

participants =  lapply(X=1:length(df$participants), FUN=function(X) {
  rep(df$participants[X], nchar(df$variables[X])) })%>% reduce(c)

data.frame(participants, variables, grades)

然而,在我的机器上使用我的真实数据需要几分钟,而且我觉得这确实效率不高,因为我需要 3 个不同的调用。

任何关于获取整洁数据的有效方法的想法都将受到欢迎(我与 tidyr/dplyr 合作)

最佳答案

您可以使用strsplitunnest:

library(tidyverse)
df %>% mutate_at(vars(variables,grades),~strsplit(.,"")) %>% unnest

#   participants variables grades
# 1            1         a      4
# 2            1         b      7
# 3            1         c      8
# 4            1         e      5
# 5            1         f      8
# 6            2         a      9
# 7            2         b      4
# 8            2         c      2

关于r - 将一列变量和一列值分成 r 中的各个组成部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49736647/

相关文章:

r - 过滤时间范围内的所有天数

python - 如何合并列表列表

r - 将行转换为列,根据另一列使用后缀重复列名

r - 通过比较 r 中数据框中的现有变量来添加新变量

r - ggplot2 geom_bar 在某些情况下在位置 ="fill"时给出错误

r - 按钮提交 R 与 Shiny

list - 将 map 转换为排序列表

python - Pandas .join 无法合并 S&P500 股票数据

r - 您可以使用 R 的原生数据编辑器在 Shiny 中编辑 csv 文件吗?

python - 如果 x 值相同,如何添加元组 y 值?