- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有大量分组数据。每组包括 12 行。 tibble 的第三列的值必须介于 1 和 12 之间。大多数行都填充了第 3 列中的所有行,但有些行没有。对于那些缺少数据 (NA) 的行,我喜欢使用 dplyr 插入正确的值。我的挑战是第 3 列中的值不一定按数字顺序排列,因此我必须找到其中不存在的值,然后相应地插入。
我准备了一个 reprex 来演示我要描述的内容。在我的示例中,B 组缺少第 3 列中的最后两个值。第 3 列中唯一不存在的值是 4 和 7。因此,我想找到一种方法来确定可以插入哪些值,然后使用mutate 将 NA 值更新为未使用的值。这是我为满足 mlogit 数据框的数据要求所做的全部努力。
library(tidyverse)
df_BEFORE <- tibble( key = c("A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B","B","B"),y=c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2), z=c(1,2,3,4,5,6,7,8,9,10,11,12,2,11,3,6,12,8,9,10,1,5,NA,NA))
print(df_BEFORE, n=24)
#> # A tibble: 24 x 3
#> key y z
#> <chr> <dbl> <dbl>
#> 1 A 2 1
#> 2 A 2 2
#> 3 A 2 3
#> 4 A 2 4
#> 5 A 2 5
#> 6 A 2 6
#> 7 A 2 7
#> 8 A 2 8
#> 9 A 2 9
#> 10 A 2 10
#> 11 A 2 11
#> 12 A 2 12
#> 13 B 2 2
#> 14 B 2 11
#> 15 B 2 3
#> 16 B 2 6
#> 17 B 2 12
#> 18 B 2 8
#> 19 B 2 9
#> 20 B 2 10
#> 21 B 2 1
#> 22 B 2 5
#> 23 B 2 NA
#> 24 B 2 NA
df_AFTER <- df_BEFORE %>%
group_by(key)
target_df <- tibble( key = c("A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B","B","B"),y=c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2), z=c(1,2,3,4,5,6,7,8,9,10,11,12,2,11,3,6,12,8,9,10,1,5,4,7))
print(target_df, n=24)
#> # A tibble: 24 x 3
#> key y z
#> <chr> <dbl> <dbl>
#> 1 A 2 1
#> 2 A 2 2
#> 3 A 2 3
#> 4 A 2 4
#> 5 A 2 5
#> 6 A 2 6
#> 7 A 2 7
#> 8 A 2 8
#> 9 A 2 9
#> 10 A 2 10
#> 11 A 2 11
#> 12 A 2 12
#> 13 B 2 2
#> 14 B 2 11
#> 15 B 2 3
#> 16 B 2 6
#> 17 B 2 12
#> 18 B 2 8
#> 19 B 2 9
#> 20 B 2 10
#> 21 B 2 1
#> 22 B 2 5
#> 23 B 2 4
#> 24 B 2 7
更新:我有一个可行的解决方案,但它丑陋的呼噜声可能会有所帮助
library(tidyverse)
df_BEFORE <- tibble( key = c("A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B","B","B"),y=c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2), z=c(1,2,3,4,5,6,7,8,9,10,11,12,2,11,3,6,12,8,9,10,1,5,NA,NA))
print(df_BEFORE, n=24)
#> # A tibble: 24 x 3
#> key y z
#> <chr> <dbl> <dbl>
#> 1 A 2 1
#> 2 A 2 2
#> 3 A 2 3
#> 4 A 2 4
#> 5 A 2 5
#> 6 A 2 6
#> 7 A 2 7
#> 8 A 2 8
#> 9 A 2 9
#> 10 A 2 10
#> 11 A 2 11
#> 12 A 2 12
#> 13 B 2 2
#> 14 B 2 11
#> 15 B 2 3
#> 16 B 2 6
#> 17 B 2 12
#> 18 B 2 8
#> 19 B 2 9
#> 20 B 2 10
#> 21 B 2 1
#> 22 B 2 5
#> 23 B 2 NA
#> 24 B 2 NA
get_index <- function(c,j){
case_when(
is.na(j) ~ 0,
j == 0 ~ 0,
j ==1 ~ setdiff(1:12,c)[1],
j ==2 ~ setdiff(1:12,c)[2],
j ==3 ~ setdiff(1:12,c)[3],
j ==4 ~ setdiff(1:12,c)[4],
j ==5 ~ setdiff(1:12,c)[5],
j ==6 ~ setdiff(1:12,c)[6],
j ==7 ~ setdiff(1:12,c)[7],
j ==8 ~ setdiff(1:12,c)[8],
j ==9 ~ setdiff(1:12,c)[9],
j ==10 ~ setdiff(1:12,c)[10],
j ==11 ~ setdiff(1:12,c)[11]
)
}
df_BEFORE %>%
group_by(key) %>%
mutate(seed = 1) %>%
mutate(flag = if_else(!is.na(z),0,seed)) %>%
mutate(j = flag + lag(flag)) %>%
mutate(temp = z) %>%
mutate(new_z = if_else(j==1,setdiff(1:12,temp)[1],
if_else(j==2,setdiff(1:12,temp)[2],
if_else(j==3,setdiff(1:12,temp)[3],
if_else(j==4,setdiff(1:12,temp)[4],
if_else(j==2,setdiff(1:12,temp)[5],
if_else(j==2,setdiff(1:12,temp)[6],
if_else(j==2,setdiff(1:12,temp)[7],
if_else(j==2,setdiff(1:12,temp)[8],
if_else(j==2,setdiff(1:12,temp)[9],
if_else(j==2,setdiff(1:12,temp)[2],0L
))))))))))) %>%
mutate(z= if_else(is.na(z),as.numeric(new_z),z)) %>%
select(-j, -new_z,-temp, -flag, -seed) %>%
print(n=24)
#> # A tibble: 24 x 3
#> # Groups: key [2]
#> key y z
#> <chr> <dbl> <dbl>
#> 1 A 2 1
#> 2 A 2 2
#> 3 A 2 3
#> 4 A 2 4
#> 5 A 2 5
#> 6 A 2 6
#> 7 A 2 7
#> 8 A 2 8
#> 9 A 2 9
#> 10 A 2 10
#> 11 A 2 11
#> 12 A 2 12
#> 13 B 2 2
#> 14 B 2 11
#> 15 B 2 3
#> 16 B 2 6
#> 17 B 2 12
#> 18 B 2 8
#> 19 B 2 9
#> 20 B 2 10
#> 21 B 2 1
#> 22 B 2 5
#> 23 B 2 4
#> 24 B 2 7
由 reprex package 创建于 2020-05-03 (v0.3.0)
最佳答案
您在评论中的想法是正确的,但您可以使用 replace()
而不是 if_else()
:
df_BEFORE %>%
group_by(key) %>%
mutate(z = replace(z, is.na(z), setdiff(1:12, z)))
关于r - 我如何使用 tidyverse 插入指定范围内且不存在于感兴趣的列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61579318/
我正在尝试安装 tidyverse 包以便在我的脚本中使用 gather 函数。每次我尝试安装软件包时都会收到以下消息: * installing *source* package ‘curl’ ..
当我加载tidyVerse时,我收到以下错误。几分钟前,当我运行我的shinyapp时,一切都很好。我该如何解决这个问题呢?
没有名为“tidyverse”的包是我在执行此操作后收到的错误消息: install.packages('tidyverse', dependencies = T); install.packages
我想在不重复的数据帧行之间创建所有可能的对(即 A_B 与 B_A 相同)。 在 tidyverse 中是否有一种优雅的方式来做到这一点? 示例数据: df df_pairs # A tibble:
我想加入两个数据框,我需要将“by”列作为动态列传递。我试图在此处遵循此解决方案 ( How to pass column names for inner join by 2 column sets
我正在尝试编写一些代码来检查字符串是否包含术语列表中包含的任何单词,以便在数据框中创建一个新列。 这是术语列表: vehicles % mutate( asset_type = case_
我有以下数据框: dat % rowwise() %>% mutate(my_ranks = list(rank(c_across(starts_with("x"))))) 但是当我尝试取消嵌
我有一个包含多个变量的数据集,其中两个是日期(开始日期、结束日期)。有时日期间隔已被拆分为序列,例如,您将: 开始:1990-12-12,停止:1990-12-13开始:1990-12-13,停止:1
我正在尝试在 R 中进行库存计算,这需要对每个 Mat-Plant 组合进行逐行计算。这是一个测试数据集 - df 300K 行,所以希望用 tidyverse 做到这一点以获得更优雅和更快的方法。尝
我有我想与我只有开始日期的事件匹配的日期。作为一个简化的代表,假设我想弄清楚在某些事件中谁是总统,但我只有就职日期。 pres % left_join(pres, by = c("date
我想创建具有中间函数的 tidyverse。我有一个结构 temp1 = sapply(df, function(x) .....) temp2 = sapply(temp1, function(x)
是否可以relocate 行 在 tidyverse框架就像可以用于带有 dplyr 的列一样relocate ? 在这个例子中,我想将第 1 行重新定位到位置 5(数据帧的结尾) 我的数据框: df
我想知道是否有人知道 dplyr 扩展包( dbplyr 和 dtplyr )是否允许在通常的 dplyr 工作流程中进行非对等连接?我很少需要 data.table ,但快速非 equi 连接是我总
我想在分组后汇总时,计算另一个因素的特定级别的数量。 在下面的工作示例中,我想计算每个组中 "male" 级别的数量。我已经尝试了很多计数、计数等方法,但找不到一种简单明了的方法来做到这一点。 df
我有一个数据框,其中包含如下所示的数据: df % group_by(group1,group2,one) %>% summarise(n()).有什么方法可以汇总所有三列,然后将它们全部绑定(bin
当涉及到输出表格时,我正在将统计分析脚本从 SPSS 转换为 R,尽管我不断遇到问题。我最近开始使用 tidyverse 包,因此理想情况下希望找到一个与之兼容的解决方案,但更一般地说,我希望能够针对
我想以编程方式rename() 我的data 中的一些变量,这样我就可以在某个时候通过map 访问它。 我正在寻找等同于, library(tidyverse) mtcars %>% rename(
使用examples从 Wickhams 对 R for data science 的 purrr 的介绍中,我正在尝试创建一个双重嵌套列表。 library(gapminder) library(p
我有一些每周收集的数据,其中的一个片段是这样的,通过 dput: p % gather(time,value,railroad, measure, category) %>%
我有数据,我想使用 tidyverse 方法获取多列的一堆汇总统计信息。但是,利用 tidyverse 的 summarize函数,它会将每个列统计信息创建为一个新列,而我更愿意将列名称视为行,将每个
我是一名优秀的程序员,十分优秀!