我的数据看起来像这样
df<-structure(list(A = c(0.7, 2.083, 2.517, 2.667, 3.883, 4.5), B = c(111L,
131747L, 23428L, 12528L, 1055L, 881L), A.1 = c(1.4, 1.65, 2.1,
2.267, 3.017, 3.383), B.1 = c(2370L, 179289L, 21690L, 10383L,
816L, 637L), A.2 = c(0.85, 1.633, 2.117, 2.267, 3.567, 5.35),
B.2 = c(520L, 54607L, 13677L, 13448L, 1346L, 772L)), .Names = c("A",
"B", "A.1", "B.1", "A.2", "B.2"), class = "data.frame", row.names = c(NA,
-6L))
我想从第1,3列开始创建一个独特的列,依此类推 然后将值分配给每个数字(如果没有任何数字,则设置为0)
我想输出如下所示
使问题清楚。首先,我们将第1列看到任何其他奇数列。然后我们找到较小的值,它将成为第一个值(在这种情况下为0.7)然后我们检查偶数列以查看它们的奇数列是否有任何值。所以A是第一个值而B有值,但我们没有看到A.1中的0.7而不是A.2所以它将为零
A,A.1,A.2 B B.1 B.2
0.7 111 0 0
0.85 0 0 520
1.4 0 2370 0
1.633 0 0 54607
1.65 0 179289 0
2.083 131747 0 0
2.1 0 21690 0
2.117 0 0 13677
2.267 0 10383 13448
2.517 23428 0 0
2.667 12528 0 0
3.017 0 816 0
3.383 0 637 0
3.567 0 0 1346
3.883 1055 0 0
4.5 881 0 0
5.35 0 0 772
答案 0 :(得分:1)
以下是base R
v1 <- sort(unique(unlist(df[c(TRUE, FALSE)], use.names = FALSE)))
res <- data.frame(A = v1, mapply(`[`,df[c(FALSE, TRUE)], lapply(df[c(TRUE, FALSE)],
function(x) match(v1, x))))
res[is.na(res)] <- 0
res
# A B B.1 B.2
#1 0.700 111 0 0
#2 0.850 0 0 520
#3 1.400 0 2370 0
#4 1.633 0 0 54607
#5 1.650 0 179289 0
#6 2.083 131747 0 0
#7 2.100 0 21690 0
#8 2.117 0 0 13677
#9 2.267 0 10383 13448
#10 2.517 23428 0 0
#11 2.667 12528 0 0
#12 3.017 0 816 0
#13 3.383 0 637 0
#14 3.567 0 0 1346
#15 3.883 1055 0 0
#16 4.500 881 0 0
#17 5.350 0 0 772