嘿嘿,
這可能已經被審查過,再加上我的 R 技能越來越生疏,但我正在嘗試生成一個新的資料幀,其中行名將從字串生成,而 effectif / 序列號將從兩列資料幀生成。
為了更有意義,我有一個資料框,如下所示:
IND Effect
A 3
B 2
C 4
read.table(text = "IND Effect
A 3
B 2
C 4", h = T)
我想要類似的東西
IND
A_1
A_2
A_3
B_1
B_2
C_1
C_2
C_3
C_4
在一個新的資料框上。我試過了:
new = mapply(function(x, y) paste0(rep(x, y), collapse = "_"), IND , Effect)
但不能按我的意愿作業....
uj5u.com熱心網友回復:
您可能需要該seq_len()
功能的幫助:
df <- data.frame(ind = c("A", "B", "C"),
effect = c(3, 2, 4))
paste(rep(df$ind, df$effect),
unlist(sapply(df$effect, seq_len)),
sep = "_")
[1] "A_1" "A_2" "A_3" "B_1" "B_2" "C_1" "C_2" "C_3" "C_4"
uj5u.com熱心網友回復:
與mapply
:
m <- mapply(paste, df$ind, sapply(df$effect, seq), sep = "_")
輸出
unlist(m)
# A1 A2 A3 B1 B2 C1 C2 C3 C4
#"A_1" "A_2" "A_3" "B_1" "B_2" "C_1" "C_2" "C_3" "C_4"
#or, as a data.frame object:
data.frame(new = unname(unlist(m)))
# new
#1 A_1
#2 A_2
#3 A_3
#4 B_1
#5 B_2
#6 C_1
#7 C_2
#8 C_3
#9 C_4
資料
df <- data.frame(ind = c("A", "B", "C"),
effect = c(3, 2, 4))
uj5u.com熱心網友回復:
這是一個使用選項expand.grid
data.frame(IND = do.call(paste, c(as.list(expand.grid(df$IND, df$Effect)), sep = "_")))
#> IND
#> 1 A_3
#> 2 B_3
#> 3 C_3
#> 4 A_2
#> 5 B_2
#> 6 C_2
#> 7 A_4
#> 8 B_4
#> 9 C_4
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/478530.html
上一篇:通過檢測模式減少字串
下一篇:將資料拆分為pandas中的列