如何解决R 使用 reshape 将数据从宽传输到长
我的数据包含三个时间点的测量值。有 2 个组(安慰剂和治疗),每个组都分配了一个 ID。数据看起来像
Group ID Time1 Time2 Time3
1 1 33 44 77
1 2 24 123 54
1 3 32 343 434
1 4 23 23 22
2 5 14 13 24
2 6 67 14 33
2 7 55 34 35
2 6 33 12 11
所需的输出应该是:
Group ID Measurement
1 1 33
1 1 44
1 1 77
1 2 24
1 2 123
1 2 54
等等。
如何使用 reshape 功能转换为长格式?谢谢。
解决方法
使用 def main(args: Array[String]): Unit = {
PDFNet.initialize()
var doc = new PDFDoc("example.pdf")
var fdf = doc.fdfExtract
var iter = fdf.getFieldIterator
while (iter.hasNext) {
var field = iter.next
var obj = field.findAttribute("T")
if (obj != null && field.getName.startsWith("MyPrefix")) {
obj.setName("NewPrefix") // `field.setName` produces the same error
}
}
}
函数你可以试试这个:
reshape
这是带有 reshape(df,direction = "long",varying = c("Time1","Time2","Time3"),v.names = "Meassurement",idvar = c("Group","ID"),timevar = "Time",new.row.names= as.character(1:(nrow(df)*3)))
Group ID Time Meassurement
1 1 1 1 33
2 1 2 1 24
3 1 3 1 32
4 1 4 1 23
5 2 5 1 14
6 2 6 1 67
7 2 7 1 55
8 2 8 1 33
的 tidyverse
方式:
pivot_longer
,
这是一个基本的 R reshape
解决方案。
vars <- grep("^Time",names(df1),value = TRUE)
Times <- as.integer(sub("[^[:digit:]]*","",vars))
df1$row.number <- seq_len(nrow(df1))
df2 <- reshape(df1,varying = list(vars),v.names = "Time",idvar = c("row.number","ID","Group"),times = Times,direction = "long")
df2$row.number <- NULL
row.names(df2) <- NULL
head(df2)
# Group ID Time
#1 1 1 33
#2 1 2 24
#3 1 3 32
#4 1 4 23
#5 2 5 14
#6 2 6 67
数据
df1 <- read.table(text = "
Group ID Time1 Time2 Time3
1 1 33 44 77
1 2 24 123 54
1 3 32 343 434
1 4 23 23 22
2 5 14 13 24
2 6 67 14 33
2 7 55 34 35
2 6 33 12 11
",header = TRUE)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。