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

问题描述

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

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

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

df <- data.frame(day = c(1,1,2,3,3),time = c(5,6,7,9,5,9),species = c('a','b','c','a','b'),diet=c('na','na','green','blue','na'))

解决方法

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

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缺少的特殊值。

,

与@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")