我有這個假資料框:
df <- structure(list(Group = c(1L, 1L, 2L, 2L), A = 1:4, B = 5:8, C = 9:12,
X = c("A", "A", "B", "B")), class = "data.frame", row.names = c(NA, -4L))
Group A B C X
1 1 1 5 9 A
2 1 2 6 10 A
3 2 3 7 11 B
4 2 4 8 12 B
我嘗試改變一個新列,它應該采用在另一列中具有列名的 THE 列的值:
期望的輸出:
Group A B C X new_col
1 1 5 9 A 1
1 2 6 10 A 1
2 3 7 11 B 7
2 4 8 12 B 7
我到目前為止的嘗試:
library(dplyr)
df %>%
group_by(Group) %>%
mutate(across(c(A,B,C), ~ifelse(first(X) %in% colnames(.), first(.), .), .names = "new_{.col}"))
Group A B C X new_A new_B new_C
<int> <int> <int> <int> <chr> <int> <int> <int>
1 1 1 5 9 A 1 5 9
2 1 2 6 10 A 1 5 9
3 2 3 7 11 B 3 7 11
4 2 4 8 12 B 3 7 11
uj5u.com熱心網友回復:
一種選擇可能是:
df %>%
rowwise() %>%
mutate(new_col = get(X)) %>%
group_by(Group, X) %>%
mutate(new_col = first(new_col))
Group A B C X new_col
<int> <int> <int> <int> <chr> <int>
1 1 1 5 9 A 1
2 1 2 6 10 A 1
3 2 3 7 11 B 7
4 2 4 8 12 B 7
uj5u.com熱心網友回復:
使用by并添加 1到組號以選擇列。假設組列按列后的示例排列"Group"。
transform(df, new_col=do.call(rbind, by(df, df$Group, \(x)
cbind(paste(x$X, x[1, x$Group[1] 1])))))
# Group A B C X new_col
# 1 1 1 5 9 A A 1
# 2 1 2 6 10 A A 1
# 3 2 3 7 11 B B 7
# 4 2 4 8 12 B B 7
注: R version 4.1.2 (2021-11-01)。
資料:
df <- structure(list(Group = c(1L, 1L, 2L, 2L), A = 1:4, B = 5:8, C = 9:12,
X = c("A", "A", "B", "B")), class = "data.frame", row.names = c(NA,
-4L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/392715.html
