如果我有这张桌子:

a <- as.data.frame(matrix(c("1", "1", "1", "1", "2", "2", "A first day", "A last day", "B first day", "B last day", "A first day", "A last day", 3, 5, 10, 14, 2, 5), ncol = 3))
colnames(a) = c("Patient", "Treatment", "Day")

它看起来像这样:

Patient Treatment Day
1 A first day 3
1 A last day 5
1 B first day 10
1 B last day 14
2 A first day 2
2 A last day 5

我如何才能将其转换为从第一天到最后一天都有自己的行,从而使表看起来像这样?

Patient Treatment Day
1 A 3
1 A 4
1 A 5
1 B 10
1 B 11
1 B 12
1 B 13
1 B 14
2 A 2
2 A 3
2 A 4
2 A 5

谢谢!

推荐答案

首先用subgo 掉多余的文本.然后拆分by ID变量,在您的情况下是1:2,数据帧的第cbind 1行减go DAY变量-3,并在do.call中使用`:`来获得序列,最后是rbind所有东西.我添加了一些额外的列,以演示它们被保留下来.

a$Treatment <- sub('\\s.*', '', a$Treatment)
by(a, a[1:2], \(x) cbind(x[1, -3], Day=do.call(`:`, as.list(as.integer(sort(x[[3]])))), row.names=NULL)) |> 
  do.call(what=rbind)
#    Patient Treatment Sex   X Day
# 1        1         A   m 0.5   3
# 2        1         A   m 0.5   4
# 3        1         A   m 0.5   5
# 4        2         A   f 0.4   2
# 5        2         A   f 0.4   3
# 6        2         A   f 0.4   4
# 7        2         A   f 0.4   5
# 8        1         B   f 0.3  10
# 9        1         B   f 0.3  11
# 10       1         B   f 0.3  12
# 11       1         B   f 0.3  13
# 12       1         B   f 0.3  14

Data:

a <- structure(list(Patient = c(1L, 1L, 1L, 1L, 2L, 2L), Treatment = c("A first day", 
"A last day", "B first day", "B last day", "A first day", "A last day"
), Day = c(3L, 5L, 10L, 14L, 2L, 5L), Sex = c("m", "m", "f", 
"f", "f", "f"), X = c(0.5, 0.5, 0.3, 0.3, 0.4, 0.4)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

R相关问答推荐

R箱形图gplot 2 4组但6个参数

根据多个条件增加y轴高度以适应geom_text标签

如何根据嵌套元素的名称高效而优雅地确定它属于哪个列表?

R—将各种CSV数字列转换为日期

R中的时间序列(Ts)函数计数不正确

计算满足R中条件的连续列

R中边际效应包中Logistic回归的交互作用风险比

使用Scale_*_MANUAL时在图例中保留未使用的系数级别

从非重叠(非滚动)周期中的最新数据向后开窗并在周期内计数

R -使用矩阵reshape 列表

在gggraph中显示来自不同数据帧的单个值

将列表中的字符串粘贴到R中for循环内的dplyr筛选器中

按组跨多列创建伪变量

有没有办法通过str_Detect()或其他字符串匹配函数来连接两个长度不等的数据帧?

子样本间系数检验的比较

我有2011-2022年的年度数据.如何计算最低年份和最高年份之间的差额?

如何准确地指出Read_delim所面临的问题?

带查找数据的FCT_REORDER.帧

通过不完全重叠的多个柱连接

R中的交叉表