r - 如何根据 R 中的内容重塑字符向量?
问题描述
我有一系列字符向量,其中每个参与者(在 ReprEx 中表示为一个字母)都有一个时间点(在 RePrex 中为 1 或 2),然后是一个分数。这是ReprEx:
l <- c("A","1","27","B","1","26","2","54")
如何重塑向量以创建具有三列的数据框,其中 A 列作为参与者,B 列作为时间点,C 列作为分数?
预期的输出应该是这样的:
data.frame("Participant" = c("A","B","B"),
"Time Point" = c("1","1","2"),
"Score" = c("27","26","54"))
如果更容易制作,它可以变成这个形状:
data.frame("Participant" = c("A","B"),
"TimePoint1" = c("27","26"),
"TimePoint2" = c("NA","54"))
任何方向/想法表示赞赏。
解决方案
这是基础 R 中的一种方法。
根据Participant
名称中的一些模式,我们可以使用grep
. 在共享的示例中,模式是每个Participant
都有一个大写字母。我们使用他们的位置来split
获取数据,因此每个Participant
人都有自己的列表。我们将每个列表中的第一个值用作Participant
名称,并将备用值分别用作Time.point
和Score
。
output <- do.call(rbind, lapply(split(l,
findInterval(seq_along(l), grep('[A-Z]', l))), function(x) {
data.frame(Participant = x[1],
Time.Point = x[-1][c(TRUE, FALSE)],
Score = x[-1][c(FALSE, TRUE)])
}))
rownames(output) <- NULL
output <- type.convert(output)
output
# Participant Time.Point Score
#1 A 1 27
#2 B 1 26
#3 B 2 54
推荐阅读
- java - Anagram制作程序的JUnit测试?
- python - 如何让列表框打印包含项目名称和价格的字典 - Python
- selenium - 使用 Selenium + Chrome 驱动程序 + Browsermob 代理登录仅在我添加另一个代理时才有效 -> 为什么?
- javascript - 使用 Bootstrap 轮播错误消息获取无法读取未定义的属性“offsetWidth”
- c# - 如何使用 C# 模式匹配与元组
- c++ - 带有 Clang 10 的显式模板实例化的 ~queue 的未定义引用
- android - kotlin 中的运行时异常
- algorithm - 通过大师定理和迭代方法的递归关系 - 不同的对数底
- amazon-s3 - s3cmd 将文件从 tar 标准输入:[Errno 32] 损坏的管道
- r - R 声称 doParallel 所依赖的包不可用,即使它们已安装并且可以加载