我有一个非常大的数据集,我想根据某些条件重新定位数据帧的某些值,请参阅下面我想要实现的示例,例如,假设我有下面的数据框< / p>
V01 V02 V03 V04 V05 V1 V2 V3 V4 V5
12 NA NA NA NA 2 NA NA NA NA
23 4 NA NA NA 3 5 NA NA NA
16 NA NA NA NA 7 NA NA NA NA
25 5 6 NA NA 2 19 10 NA NA
21 14 NA NA NA 1 5 NA NA NA
对于每个V0,都有相应的V值,但问题是V1到V5的值是基于从V01到V05的值的升序。例如在第2行中,V01应答(23)的对应值是V2 Answer(5),而V02 Answer(4)的对应值是V1 Answer(3)。
同样在第4行中,V01 Answer(25)的对应值是V03 Answer(10),而V02 Answer(5)的对应值是V1 Answer(2)和相应的V03答案(6)是V1答案(19)。
对于只有一个值的行,肯定不会有任何问题。比如第1行和第3行
我想要实现的是根据V01到V05的相应值将V1重新定位到V5。请参阅下面示例的输出应该是什么样的
V01 V02 V03 V04 V05 V1 V2 V3 V4 V5
12 NA NA NA NA 2 NA NA NA NA
23 4 NA NA NA 5 3 NA NA NA
16 NA NA NA NA 7 NA NA NA NA
25 5 6 NA NA 10 2 19 NA NA
21 14 NA NA NA 5 1 NA NA NA
答案 0 :(得分:2)
尝试以下方法:
library(reshape2)
library(dplyr)
df
V01 V02 V03 V04 V05 V1 V2 V3 V4 V5
1 12 NA NA NA NA 2 NA NA NA NA
2 23 4 NA NA NA 3 5 NA NA NA
3 16 NA NA NA NA 7 NA NA NA NA
4 25 5 6 NA NA 2 19 10 NA NA
5 21 14 NA NA NA 1 5 NA NA NA
df$rows <- 1:nrow(df) # to keep row order
以下内容可以写在一个长管道中,但为了便于阅读,我将其分为几行:
df <- melt(df, id.vars = c("rows", paste0("V0", 1:5)))
df <- df %>% group_by(V01) %>% arrange(desc(value))
df <- df %>% group_by(V01) %>% mutate(ind = paste0("V", 1:n()))
df <- df %>% dcast(rows + V01 + V02 + V03 + V05 + V05 ~ ind, value.var = "value", fill = NA)
df$rows <- NULL
df
V01 V02 V03 V05 V05 V1 V2 V3 V4 V5
1 12 NA NA NA NA 2 NA NA NA NA
2 23 4 NA NA NA 5 3 NA NA NA
3 16 NA NA NA NA 7 NA NA NA NA
4 25 5 6 NA NA 19 10 2 NA NA
5 21 14 NA NA NA 5 1 NA NA NA