根据条件并与现有条件匹配创建新变量

时间:2020-09-17 20:05:53

标签: r dplyr match

我的数据集包含以下变量:日,时,种,饮食

“饮食”仅在每个“日”的某些“时间”记录,因此,我希望创建一个新变量“ daily.diet”,其中每个物种每天的“饮食”值为(例如,天和物种匹配时,daily.diet =饮食。)

我制作了一个示例数据框以供使用:

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'))

2 个答案:

答案 0 :(得分:0)

尽管我不确定您要寻找的是什么,但我猜您是否想要类似的东西

print(list.length)

您可以使用class _ContactListState extends State<ContactList> { bool _isSearching = false; List<Contact> list; ... _inputHandler(String text) { if (text == null || text.trim() == '') { return; } _isSearching = true; text = text.toLowerCase(); setState(() { list = list .where((Contact el) => el.displayName.toLowerCase().contains(text) || el.phones.toList()[0].value.contains(text)) .toList(); }); print(list.length); // Also logs 129, when text = 'Akh' // Should have logged 2 } FutureBuilder _getList() { // As above } @override Widget build(BuildContext context) { // As above } } 将其重新连接到原始数据。

此外,您可能希望使用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)。后者只是一个字符串,而前者是R缺少的特殊值。

答案 1 :(得分:0)

与@Michael Dewar达成协议,您可能要考虑使用NA处理丢失的数据,除非您的编码方案/数据收集有其他充分的理由使您无法使用。

也可以使用tidyverse,您可以从fill tidyrdiet和{{1 }}一样。

例如:

day

示例数据不包括可能发生这种情况的实例。这是一个示例,其中包含不同的数据来演示,并创建了一个新列species

library(dplyr)
library(tidyr)

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

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

输出

daily.diet

数据

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