作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下数据框(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 合作)
最佳答案
您可以使用strsplit
和unnest
:
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/
我是一名优秀的程序员,十分优秀!