【发布时间】:2020-11-07 01:37:29
【问题描述】:
我正在尝试使用 ifelse 条件更改嵌套数据框中的新变量。但问题是在实现 ifelse 条件后,嵌套的数据框变成了一个列表。
我想用iris 数据集展示这个问题:
这里可以看到原来的嵌套格式:
iris %>% nest(data = -Species)
# A tibble: 3 x 2
Species data
<fct> <list>
1 setosa <tibble [50 x 4]>
2 versicolor <tibble [50 x 4]>
3 virginica <tibble [50 x 4]>
现在我想在嵌套数据框中改变一个新变量:
iris %>%
nest(data = -Species) %>%
mutate(data = map(data, function(x)
x %>% mutate(`Sepal.Length^2` = Sepal.Length^2)))
# A tibble: 3 x 2
Species data
<fct> <list>
1 setosa <tibble [50 x 5]>
2 versicolor <tibble [50 x 5]>
3 virginica <tibble [50 x 5]>
此代码有效。 data-column 在 tibble 格式中是所需的。
但如果我现在插入 ifelse 条件,则 tibble 格式会丢失:
iris %>%
nest(data = -Species) %>%
mutate(data = map(data, function(x)
ifelse(!is.na(x), x %>% mutate(`Sepal.Length^2` = Sepal.Length^2), NA)))
# A tibble: 3 x 2
Species data
<fct> <list>
1 setosa <list [200]>
2 versicolor <list [200]>
3 virginica <list [200]>
即使使用ifelse-条件,我也想保留tibble-格式。
谁能帮帮我?
【问题讨论】:
-
我认为您必须先创建新列,然后执行 ifelse 条件。所以像
... map(... function(x) mutate(x, ifelse(...))) -
在我的原始数据集中这是不可能的,因为在
NA-colum 中有一些NA-values。所以首先我必须使用 ifelse 函数“过滤”数据。 -
但是只有在没有 NA 的情况下,您才不会发生变异。你正在变异,然后你处理这些条件。所以
ifelse(!is.na(x), x^2, x)。但也许我在你的解释中遗漏了一些东西 -
它适用于
if-function 而不是ifelse-function
标签: r if-statement nested