我尝试使用{将数字月份(1,2,3,4..12)转换为数据框列表mymonths
中的月份缩写(请参阅df_list
) {1}}并且似乎无法正确输出。列表中的所有数据帧都具有相同的变量。
使用下面的代码,新lapply
仅包含新月份列,而原始帧中没有其他数据。对于糟糕的示例数据感到抱歉,但我认为我只是缺少一个简单的命令来获取整个原始数据集,而不仅仅是月份列。
df_list2
答案 0 :(得分:1)
只需要在lapply
位
# create example data
d1 <- data.frame(month = c(1:3), val = c(1,2,5))
d2 <- data.frame(month = c(1:5), val = c(1,2,5,6,8))
df_list <- list(d1, d2)
mymonths <- c("JAN","FEB","MAR",
"APR","MAY","JUN",
"JUL","AUG","SEP",
"OCT","NOV","DEC")
如果月份列是指月份,那么......
df_list2 <- lapply(df_list , function(x) {
x[,1] <- mymonths[ x[,1] ]
x
})
df_list2
[[1]]
month val
1 JAN 1
2 FEB 2
3 MAR 5
[[2]]
month val
1 JAN 1
2 FEB 2
3 MAR 5
4 APR 6
5 MAY 8
如果值列指的是月份,那么......
df_list2 <- lapply(df_list , function(x) {
x[,1] <- mymonths[ x[,2] ]
x
})
df_list2
[[1]]
month val
1 JAN 1
2 FEB 2
3 MAY 5
[[2]]
month val
1 JAN 1
2 FEB 2
3 MAY 5
4 JUN 6
5 AUG 8
但是你必须在lapply
答案 1 :(得分:1)
你的'lapply`使用中存在非常小的错误。请将代码更改为:
df_list2 <- lapply(df_list , function(x) {
x[,2] <- mymonths [ x[,2] ]
x
})
month
列的实际值应传递给mymonths
向量。因此,请通过x[,2]
。
还有一点是应该从函数返回x
。因此增加了额外的线条。
现在df_list2
的输出将是:
> df_list2
[[1]]
month val
1 1 JAN
2 2 FEB
3 3 MAY
[[2]]
month val
1 1 JAN
2 2 FEB
3 3 MAY
4 4 JUN
5 5 AUG
答案 2 :(得分:0)
你要找的那个词是join
吗?
library(dplyr)
library(purrr)
# create example data
df_list <- list(data.frame(month = c(1:3), val = c(1,2,5)),
data.frame(month = c(1:5), val = c(1,2,5,6,8)))
mymonths <- data.frame(month_name=c("JAN","FEB","MAR",
"APR","MAY","JUN",
"JUL","AUG","SEP",
"OCT","NOV","DEC"),
month=seq(12))
map(df_list,left_join, mymonths)
我们获取数据帧列表
[[1]]
month val month_name
1 1 1 JAN
2 2 2 FEB
3 3 5 MAR
[[2]]
month val month_name
1 1 1 JAN
2 2 2 FEB
3 3 5 MAR
4 4 6 APR
5 5 8 MAY
答案 3 :(得分:0)
只需使用Matrix
函数:根据要分配给新变量的名称,您可以重写现有变量或创建一个全新的变量:
重写现有变量:
transform
答案 4 :(得分:0)
使用tidyverse
包,map
包中的purrr
函数和基数R中的month.abb
常量:
library(tidyverse)
d1 <- data.frame(month = c(1:3), val = c(1,2,5))
d2 <- data.frame(month = c(1:5), val = c(1,2,5,6,8))
df_list <- list(d1, d2)
month_abbreviation <- function(x)
transform(x, MonthAbb = month.abb[month])
让我们使用purrr包中的map函数迭代运行你的函数而不使用for循环
list_of_df <- map(df_list, month_abbreviation)