我有一个数据框列表L:
vec1 <- c("a", "b", "c", "d")
val <- c(11, 5443, 552, 9)
vec2 <- c("r", "p", "h", "y")
val <- c(5, 9, 47, 23)
创建数据框:
df1 <- data.frame(vec1, val, stringsAsFactors = FALSE)
df2 <- data.frame(vec2, val, stringsAsFactors = FALSE)
L <- list(df1, df2)
现在我想删除val列,例如:
P <- lapply(L, function (y) {y$val <- NULL})
输出:
P <- lapply(L, function (y) {y$val <- NULL})
> P
[[1]]
NULL
[[2]]
NULL
手动运行:
L[[1]]$val <- NULL
L
[[1]]
vec1
1 a
2 b
3 c
4 d
[[2]]
vec2 val
1 r 5
2 p 9
3 h 47
4 y 23
出于某种原因,我无法做到这一点,但手动完成它,请指教。
P.S 我得到了列表(我没有创建它),并且无法访问val,因为R不知道它是什么。
Error in overscope_eval_next(overscope, expr) :
object 'val' not found
使用dplyr select时,找不到val列:
library(dplyr)
P <- lapply(L, function (y) {select(y, -val)})
答案 0 :(得分:1)
这两个命令对我有用:
library(dplyr)
vec1 <- c("a", "b", "c", "d")
val <- c(11, 5443, 552, 9)
vec2 <- c("r", "p", "h", "y")
val <- c(5, 9, 47, 23)
df1 <- data.frame(vec1, val, stringsAsFactors = FALSE)
df2 <- data.frame(vec2, val, stringsAsFactors = FALSE)
L <- list(df1, df2)
L
# [[1]]
# vec1 val
# 1 a 5
# 2 b 9
# 3 c 47
# 4 d 23
#
# [[2]]
# vec2 val
# 1 r 5
# 2 p 9
# 3 h 47
# 4 y 23
lapply(L, function (y) {y$val <- NULL; y})
# [[1]]
# vec1
# 1 a
# 2 b
# 3 c
# 4 d
#
# [[2]]
# vec2
# 1 r
# 2 p
# 3 h
# 4 y
lapply(L, function (y) {select(y, -val)})
# [[1]]
# vec1
# 1 a
# 2 b
# 3 c
# 4 d
#
# [[2]]
# vec2
# 1 r
# 2 p
# 3 h
# 4 y