我正在處理如下所示的資料:
| 標簽 |
|---|
| 一個 |
| 乙 |
| C |
我創建了一個鍵值索引(使用如下代碼),用于基于此現有列創建新列。
values <- c("word1", "word2", "word3")
keys <- c("a", "b", "c")
index <- setNames(as.list(values), keys)
制作此索引后,我希望能夠使用簡單的一行 for 回圈創建一個新列,如下所示。
df$newcol <- for (x in df$label){index$x}
不過,這段代碼似乎根本不會在我的資料框中產生任何變化。我在這里不明白什么?
uj5u.com熱心網友回復:
我會用dplyr::recode:
df$newcol <- dplyr::recode(df$label, !!!index)
輸出:
> df
label newcol
1 a word1
2 b word2
3 c word3
>
uj5u.com熱心網友回復:
嘗試檢查for (x in df$label){print(index$x)}。
它會回來
NULL
NULL
NULL
而不是$內部函式,嘗試使用[]呼叫一些值。并且,首先創建一個新向量,然后將其附加到df$newcol將作業。
newcol <- c()
for (x in df$label){
newcol <- c(newcol, index[x])
}
df$newcol <- newcol
df
label newcol
1 a word1
2 b word2
3 c word3
或者,for回圈變化不大
for (x in 1:nrow(df)){
df$newcol[x] <- index[df$label[x]]
}
df
label newcol
1 a word1
2 b word2
3 c word3
uj5u.com熱心網友回復:
您可能希望使用資料框而不是串列索引。然后使用match().
index <- data.frame(values, keys)
df$newcol <- index[match(df$label, index$keys), 'values']
df
# label newcol
# 1 a word1
# 2 b word2
# 3 c word3
# 4 a word1
# 5 b word2
# 6 c word3
資料:
df <- data.frame(label=letters[c(1:3, 1:3)])
index <- structure(list(values = c("word1", "word2", "word3"), keys = c("a",
"b", "c")), class = "data.frame", row.names = c(NA, -3L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380668.html
上一篇:替換多個字串中的多個單詞
