我的数据集包含以下变量:日,时,种,饮食
“饮食”仅在每个“日”的某些“时间”记录,因此,我希望创建一个新变量“ 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'))
答案 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
tidyr
在diet
和{{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")