【发布时间】:2021-03-19 09:42:17
【问题描述】:
我有一个包含两个数据框的列表,第一个有两列,第二个有三列。
dat.list<-list(dat1=data.frame(col1=c(1,2,3),
col2=c(10,20,30)),
dat2= data.frame(col1=c(5,6,7),
col2=c(30,40,50),
col3=c(7,8,9)))
# $dat1
# col1 col2
# 1 1 10
# 2 2 20
# 3 3 30
# $dat2
# col1 col2 col3
# 1 5 30 7
# 2 6 40 8
# 3 7 50 9
我正在尝试使用map()、mutate() 和case_when() 在两个数据框中创建一个新列。如果数据框有两个以上的列,我希望这个新列与 col3 相同,如果它有两个或更少的列,则与 col1 相同。我尝试使用以下代码执行此操作:
library(tidyverse)
dat.list %>% map(~ .x %>%
mutate(newcol=case_when(ncol(.)>2 ~ col3,
TRUE ~ col1),
))
但是,这会返回以下错误:“找不到对象 'col3'”。如何获得所需的输出?下面是我想要达到的确切输出。
# $dat1
# col1 col2 newcol
# 1 1 10 1
# 2 2 20 2
# 3 3 30 3
# $dat2
# col1 col2 col3 newcol
# 1 5 30 7 7
# 2 6 40 8 8
# 3 7 50 9 9
【问题讨论】: