首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据条件建立一个新变量并与现有变量匹配

根据条件建立一个新变量并与现有变量匹配
EN

Stack Overflow用户
提问于 2020-09-17 20:05:53
回答 2查看 54关注 0票数 0

我的数据集由变量组成:日期、时间、种类、饮食。

“饮食”只记录在每一天的某些‘时间’,因此,我想要创建一个新的变量' daily.diet‘,其值是每个物种每天的“饮食”值(即,当天和物种匹配时,daily.diet=饮食)。

我制作了一个使用dataframe的示例:

代码语言:javascript
复制
df <- data.frame(day = c(1,1,1,2,2,2,3,3,3), 
                  time = c(5,6,7,9,5,7,9,5,9), 
  species = c('a','b','c','c','c','b','a','a','b'),
  diet=c('na', 'na', 'green', 'na', 'na', 'blue', 'na', 'na', 'na'))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-18 03:07:43

同意@Michael的观点,您可能会考虑使用NA来查找丢失的数据,除非您的编码方案/数据收集有充分的理由引导您。

也可以使用tidyverse,您可以从tidyr中输入diet值,在缺少的地方,在dayspecies相同的行中填写。

例如:

代码语言:javascript
复制
library(dplyr)
library(tidyr)

df$diet <- replace(df$diet, df$diet == 'na', NA)

df %>%
  group_by(day, species) %>%
  fill(diet, .direction = "downup")

示例数据不包括可能发生这种情况的实例。下面是一个要演示的不同数据的示例,并创建了一个新列daily.diet

代码语言:javascript
复制
df %>%
  group_by(day, species) %>%
  mutate(daily.diet = diet) %>%
  fill(daily.diet, .direction = "downup")

输出

代码语言:javascript
复制
    day  time species diet  daily.diet
  <dbl> <dbl> <chr>   <chr> <chr>     
1     1     5 a       NA    NA        
2     1     6 b       NA    NA        
3     1     7 c       green green     
4     1     9 c       NA    green     
5     2     5 c       NA    NA        
6     2     7 b       blue  blue      
7     3     9 a       red   red       
8     3     5 a       NA    red       
9     3     9 b       NA    NA 

数据

代码语言:javascript
复制
df <- structure(list(day = c(1, 1, 1, 1, 2, 2, 3, 3, 3), time = c(5, 
6, 7, 9, 5, 7, 9, 5, 9), species = c("a", "b", "c", "c", "c", 
"b", "a", "a", "b"), diet = c(NA, NA, "green", NA, NA, "blue", 
"red", NA, NA)), row.names = c(NA, -9L), class = "data.frame")
票数 0
EN

Stack Overflow用户

发布于 2020-09-17 20:49:07

虽然我不太确定你在找什么,但我猜你想要的是

代码语言:javascript
复制
library(tidyverse)
new_df <- df %>% 
    group_by(species, day) %>% 
    filter(n_distinct(diet) == 1) %>% 
    ungroup %>% 
    distinct(day, species, daily.diet = diet)

您可以使用df %>% left_join(new_df)将其连接回原始数据。

另外,您可能希望使用NA而不是'na'。后者只是一个字符串,而前者是R缺少的特殊值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63945510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档