R 如果同一期间有质量良好的数据,请删除质量较差的列
我有以下问题:我的数据包含好的和坏的质量数据。例如,在2017年12月31日,我有一列质量良好的数据R 如果同一期间有质量良好的数据,请删除质量较差的列,r,if-statement,data-manipulation,R,If Statement,Data Manipulation,我有以下问题:我的数据包含好的和坏的质量数据。例如,在2017年12月31日,我有一列质量良好的数据(质量=a),值为800,质量不良的数据(质量=b),值为750 Quality Time Value 1 a 2017-12-31 800 2 a 2018-12-31 500 3 b 2017-12-31 750 4 b 2018-12-31 480 5 b 2019-12-31 200 示例数据
(质量=a)
,值为800,质量不良的数据(质量=b)
,值为750
Quality Time Value
1 a 2017-12-31 800
2 a 2018-12-31 500
3 b 2017-12-31 750
4 b 2018-12-31 480
5 b 2019-12-31 200
示例数据帧:
df <- data.frame(Quality = c("a", "a", "b", "b", "b"), Time = c("2017-12-31", "2018-12-31", "2017-12-31", "2018-12-31", "2019-12-31"), Value = c(800, 500, 750, 480, 200))
我试图用if语句解决这个问题,但失败了。我的真实数据有10000多行和多个日期。非常感谢您的帮助。您可以在
match
的帮助下完成此操作:
library(dplyr)
df %>%
group_by(Time) %>%
slice(first(na.omit(match(c('a', 'b'), Quality)))) %>%
ungroup
# Quality Time Value
# <chr> <chr> <dbl>
#1 a 2017-12-31 800
#2 a 2018-12-31 500
#3 b 2019-12-31 200
库(dplyr)
df%>%
分组单位(时间)%>%
切片(第一个(na.省略(匹配(c('a','b'),质量)))%>%
解组
#质量时间价值
#
#1A 2017-12-31 800
#2 a 2018-12-31 500
#3B 2019-12-31200
您可以在匹配的帮助下执行此操作:
library(dplyr)
df %>%
group_by(Time) %>%
slice(first(na.omit(match(c('a', 'b'), Quality)))) %>%
ungroup
# Quality Time Value
# <chr> <chr> <dbl>
#1 a 2017-12-31 800
#2 a 2018-12-31 500
#3 b 2019-12-31 200
库(dplyr)
df%>%
分组单位(时间)%>%
切片(第一个(na.省略(匹配(c('a','b'),质量)))%>%
解组
#质量时间价值
#
#1A 2017-12-31 800
#2 a 2018-12-31 500
#3B 2019-12-31200
您可以通过按质量排序,然后按时间进行重复数据消除来做到这一点
library(dplyr)
df %>%
arrange(Quality) %>% #sort by quality so a is first
distinct(Time, .keep_all = TRUE) #keep only the first row for each time value and keep all columns
如果您更喜欢base R,您可以使用order(Quality)
和df[which(!duplicated(df$Time)),]
进行同样的操作,方法是按质量排序,然后按时间消除重复
library(dplyr)
df %>%
arrange(Quality) %>% #sort by quality so a is first
distinct(Time, .keep_all = TRUE) #keep only the first row for each time value and keep all columns
如果您更喜欢base R,您可以使用order(Quality)
和df[which(!duplicated(df$Time)),]
感谢您的支持。但由于我的真实数据更为复杂,很遗憾,这不起作用。但是谢谢!没问题。你能解释一下为什么它对你的数据不起作用吗?可能对我有帮助。我实际上有两个以上的质量标准,比如“c”,但在那个时期没有其他数据,只有c质量。此外,质量不是作为“a”、“b”等的reportet,而是作为另一个字符串。此外,我有不同的个人为每一个价值观等,这使一切更加复杂。所以时间不能是唯一的,但是在你的解决方案中只有唯一的时间。但是谢谢你的帮助,这就是为什么我对你的问题投了更高的票:)啊,这是有道理的——两个以上的值是可以的,但是其他部分可能会导致问题,如果没有group_by,或者可能是非词典排序。谢谢你让我知道!谢谢你的邀请。但由于我的真实数据更为复杂,很遗憾,这不起作用。但是谢谢!没问题。你能解释一下为什么它对你的数据不起作用吗?可能对我有帮助。我实际上有两个以上的质量标准,比如“c”,但在那个时期没有其他数据,只有c质量。此外,质量不是作为“a”、“b”等的reportet,而是作为另一个字符串。此外,我有不同的个人为每一个价值观等,这使一切更加复杂。所以时间不能是唯一的,但是在你的解决方案中只有唯一的时间。但是谢谢你的帮助,这就是为什么我对你的问题投了更高的票:)啊,这是有道理的——两个以上的值是可以的,但是其他部分可能会导致问题,如果没有group_by,或者可能是非词典排序。谢谢你让我知道!