我有 2 個資料框yng1 yng2。我希望為survey每個資料幀添加一個變數,該變數等于資料幀的最后一位。所需的代碼應該生成一個變數,survey其中所有值都等于 1 in yng1,所有值都等于 2 in yng2,依此類推。
我曾嘗試使用 for 回圈,但沒有取得多大成功。
示例資料
yng1 <- as.data.frame(c(1:4))
yng2 <- as.data.frame(c(5:8))
期望輸出
> yng1
c(1:4) survey
1 1 1
2 2 1
3 3 1
4 4 1
> yng2
c(5:8) survey
1 5 2
2 6 2
3 7 2
4 8 2
實際上,我有 2 個以上的資料幀,因此我希望能夠從 1 到 N 回圈以將函式應用于每個資料幀。如果有幫助,可以將資料框存盤在串列中。
uj5u.com熱心網友回復:
您可以嘗試使用此功能。
surrvey <- function(df){
df$survey <- stringr::str_sub(deparse(substitute(df)), -1)
df
}
yng1 <- surrvey(yng1)
yng1
c(1:4) survey
1 1 1
2 2 1
3 3 1
4 4 1
我不知道你想如何回圈以及如何存盤這些表。如果有任何問題,請告訴我。
我認為存盤在串列中是最簡單的。
ynglst <- list(yng1, yng2)
for(i in 1:2){
ynglst[[i]]$survey <- i
}
ynglst
[[1]]
c(1:4) survey
1 1 1
2 2 1
3 3 1
4 4 1
[[2]]
c(5:8) survey
1 5 2
2 6 2
3 7 2
4 8 2
uj5u.com熱心網友回復:
一個tidyverse選項——
library(tidyverse)
yng1 <- data.frame(a = c(1:4))
yng2 <- data.frame(b = c(5:8))
result <- imap(mget(paste0('yng', 1:2)),
~.x %>% mutate(survey = parse_number(.y)))
result
#$yng1
# a survey
#1 1 1
#2 2 1
#3 3 1
#4 4 1
#$yng2
# b survey
#1 5 2
#2 6 2
#3 7 2
#4 8 2
或者在基礎 R -
list_df <- mget(paste0('yng', 1:2))
result <- Map(function(x, y) transform(x, survey = sub('yng', '', y)),
list_df, names(list_df))
這為您提供了資料框串列,以使此更改反映在您可以使用的各個資料框中 -
list2env(result, .GlobalEnv)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/352461.html
標籤:r
上一篇:無法識別的nullPointerException和“執行緒“JavaFX應用程式執行緒”中的例外”
下一篇:僅對負數將最接近的數字子集為零
