- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下示例输出:
country country-year year a b
1 France France2000 2000 NA NA
2 France France2001 2001 1000 1000
3 France France2002 2002 NA NA
4 France France2003 2003 1600 2200
5 France France2004 2004 NA NA
6 UK UK2000 2000 1000 1000
7 UK UK2001 2001 NA NA
8 UK UK2002 2002 1000 1000
9 UK UK2003 2003 NA NA
10 UK UK2004 2004 NA NA
11 Germany UK2000 2000 NA NA
12 Germany UK2001 2001 NA NA
13 Germany UK2002 2002 NA NA
14 Germany UK2003 2003 NA NA
15 Germany UK2004 2004 NA NA
a
的列和
b
都是 NA。换句话说,我想删除所有无法插入的列;在示例中:
1 France France2000 NA NA
5 France France2004 NA NA
9 UK UK2003 NA NA
10 UK UK2004 NA NA
11 Germany UK2000 NA NA
12 Germany UK2001 NA NA
13 Germany UK2002 NA NA
14 Germany UK2003 NA NA
15 Germany UK2004 NA NA
library(tidyverse)
library(zoo)
df %>%
group_by(country) %>%
mutate_at(vars(a:b),~na.fill(.x,c(NA, "extend", NA))) %>%
filter(!is.na(a) | !is.na(b))
df%>%
group_by(Country)%>%
mutate_if(is.numeric,~if(all(is.na(.x))) NA else na.fill(.x,"extend"))
df <- df%>%
group_by(country)%>%
mutate_at(vars(a:b),~if(all(is.na(.x))) NA else(.x,c(NA, "extend", NA)))
filter(!is.na(df$a | df$a))
country country-year a b
2 France France2001 1000 1000
3 France France2002 1300 1600
4 France France2003 1600 2200
6 UK UK2000 1000 1000
7 UK UK2001 0 0
8 UK UK2002 1000 1000
最佳答案
我知道这并没有直接回答如何结合 mutate_if
的问题和 mutate_at
,但这解决了您的一般问题:
我首先去掉所有 a 和 b 都缺失的国家,然后为每个国家确定最小和最大年份,这是没有缺失的。过滤这些后,我使用 na.fill
.
library(dplyr)
library(readr)
library(zoo)
country_data %>%
mutate(Year = parse_number(`country-year`)) %>%
group_by(country) %>%
mutate(not_all_na = any(!(is.na(a) & is.na(b)))) %>%
filter(not_all_na) %>%
mutate(Year_min_not_na = min(Year[!(is.na(a) & is.na(b))]),
Year_max_not_na = max(Year[!(is.na(a) & is.na(b))])) %>%
filter(Year >= Year_min_not_na, Year <= Year_max_not_na) %>%
mutate_at(vars(a:b), ~na.fill(.x, "extend"))
# A tibble: 6 x 8
# Groups: country [2]
# country `country-year` a b Year not_all_na Year_min_not_na Year_max_not_na
# <fct> <fct> <dbl> <dbl> <dbl> <lgl> <dbl> <dbl>
# 1 France France2001 1000 1000 2001 TRUE 2001 2003
# 2 France France2002 1300 1600 2002 TRUE 2001 2003
# 3 France France2003 1600 2200 2003 TRUE 2001 2003
# 4 UK UK2000 1000 1000 2000 TRUE 2000 2002
# 5 UK UK2001 1000 1000 2001 TRUE 2000 2002
# 6 UK UK2002 1000 1000 2002 TRUE 2000 2002
country_data <-
structure(list(country = structure(c(1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L),
.Label = c("France", "Germany", "UK"), class = "factor"),
country.year = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 6L, 7L, 8L, 9L, 10L),
.Label = c("France2000", "France2001", "France2002", "France2003",
"France2004", "UK2000", "UK2001", "UK2002", "UK2003", "UK2004"),
class = "factor"),
a = c(NA, 1000L, NA, 1600L, NA, 1000L, NA, 1000L, NA, NA, NA, NA, NA, NA, NA),
b = c(NA, 1000L, NA, 2200L, NA, 1000L, NA, 1000L, NA, NA, NA, NA, NA, NA, NA)),
class = "data.frame", row.names = c(NA, -15L))
关于r - 我可以结合使用 dplyr mutate_at 和 mutate_if 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51877611/
我有一个问题: df = tibble(one = list('a', 'b'), two = list(c('p1', 'p2', 'p3'), NA_character_), three = li
我试图从所有其他列中减去一列,但并非所有列都被修改。 test % mutate_at(vars(-a), funs(. - !!as.name(col))) a b c
我刚问了a question about generating multiple columns at once with dplyr ,我是个笨蛋,把问题简单化了,还有另一个问题。我想找到一种 dp
使用 dplyr , 有没有办法在不使用 rowwise() 的情况下逐行选择性地改变列? 例如,给定下面的输入,我想在以“pre_”为前缀的列中用零替换负数: df % rowwise() %
我正在尝试收紧 %>%管道工作流,我需要将相同的函数应用于多列,但每次更改一个参数。我觉得purrr的 map或 invoke函数应该会有所帮助,但我无法理解它。 我的数据框包含预期生命周期、贫困率和
我一直在玩dplyr::mutate_at通过对某些列应用相同的函数来创建新变量。当我命名我的函数 在 .funs参数,mutate 调用创建带有后缀的新列而不是替换现有列,这是我在 this thr
这个问题已经有答案了: Create new variables with mutate_at while keeping the original ones (1 个回答) 已关闭 3 年前。 我有
如果我有这样的数据框 set.seed(1) df % mutate(Y = if_else(X > 10, -Y, Y), Z = if_else(X > 10,
我定义了必须应用于不同数据框列集的函数。例如,mtcars 我想将 as.integer() 函数应用于列 c("mpg", "cyl") 和 >as.logic() 到 c("vs", "am")
如果我有这样的数据框 set.seed(1) df % mutate(Y = if_else(X > 10, -Y, Y), Z = if_else(X > 10,
有一个 data.frame (tibble) 如下: require(dplyr) df_org 1 1 A 2 2 B 使用 mutate_at 会抛出以下错误
我经常遇到必须重新编码遵循相同结构的多个列并将它们保存到具有不同名称的列中的问题。如果我可以覆盖它们,这将只是 dplyr 中的一行,但由于我还想保留原始列,我不知道一个好的解决方案。下图。 这将是我
这个问题在这里已经有了答案: Applying a function to every row of a table using dplyr? (8 个回答) 关闭 3 年前。 我有一个列,我希望将其
我可以在单个 mutate_at 步骤中在同一列上连续使用多个函数,例如:(sqrt(log(x))) library(dplyr) head(mtcars) %>% select(mpg,
我正在尝试重新编码几个变量,但使用不同的重新编码方案。重新编码方案保存在一个列表中,其中每个元素都是 old = new 形式的命名向量。每个元素是数据框中每个变量的重新编码方案 我正在使用 muta
我正在尝试对 R 中数据框的多个列应用相同的函数。 我有一个单独的数据框,其中包含主数据框中的一些列。当主数据框中的列在另一个数据框中时,我想将这两列加在一起,但我似乎无法弄清楚如何访问 mutate
我有一个 data.frame具有大量名称遵循模式的列。如: df % mutate( x = ifelse(is.na(x_1), x_2, x_1), y = ifelse(i
require(dplyr) df % mutate_at(.vars = col_var, .funs = list(~ ifelse(df[, col_var+1] =
这是我的数据: ID a b c d 1 x 1 2 3 2 y 1 2 3 3 z NA NA NA 4 z 1 2 3 5 y NA NA NA 现在,如果我想用 a 组的 b 平均值替
我想创建一个函数,可以根据用户提供的输入变量和截止值列表以编程方式添加变量。 具体来说,我想定义一个函数 myfun 1
我是一名优秀的程序员,十分优秀!