R是否根据一个数据集中的列信息/条件将行值替换为其他行?
我收到了一个平面数据,在平面化数据时缺少值。 我必须根据id、类型和日期,以小时为单位计算NAs的小时数,以便以美元为单位删除NAsR是否根据一个数据集中的列信息/条件将行值替换为其他行?,r,conditional-statements,grouping,R,Conditional Statements,Grouping,我收到了一个平面数据,在平面化数据时缺少值。 我必须根据id、类型和日期,以小时为单位计算NAs的小时数,以便以美元为单位删除NAs id<-c(1,2,1,1,1,2,1) dollar<-as.numeric(c(100,200,300,500, NA, NA,NA)) hours<-as.numeric(c(NA,NA, NA, NA, 5,10,12)) type<-c("Engineer", "Engineer","Operating","Part", "Eng
id<-c(1,2,1,1,1,2,1)
dollar<-as.numeric(c(100,200,300,500, NA, NA,NA))
hours<-as.numeric(c(NA,NA, NA, NA, 5,10,12))
type<-c("Engineer", "Engineer","Operating","Part", "Engineer","Engineer","Operating" )
Date<-c("2020-01-02","2020-01-03","2020-01-02","2020-01-04", "2020-01-02","2020-01-03","2020-01-02")
id dollar hours type Date
1 1 100 <NA> Engineer 2020-01-02
2 2 200 <NA> Engineer 2020-01-03
3 1 300 <NA> Operating 2020-01-02
4 1 500 <NA> Part 2020-01-04
5 1 <NA> 5 Engineer 2020-01-02
6 2 <NA> 10 Engineer 2020-01-03
7 1 <NA> 12 Operating 2020-01-02
id这里有一种使用tidyverse
的方法。您可以按id
、类型
和日期
进行分组,然后用可用值填充缺少的NA
library(tidyverse)
df %>%
group_by(id, type, Date) %>%
fill(c(dollar, hours), .direction = "updown") %>%
slice(1)
输出
# A tibble: 4 x 5
# Groups: id, type, Date [4]
id dollar hours type Date
<dbl> <dbl> <dbl> <fct> <fct>
1 1 100 5 Engineer 2020-01-02
2 1 300 12 Operating 2020-01-02
3 1 500 NA Part 2020-01-04
4 2 200 10 Engineer 2020-01-03
#一个tible:4 x 5
#组:id、类型、日期[4]
id美元小时数类型日期
11005工程师2020-01-02
2130012运营2020-01-02
3 1500 NA第2020-01-04部分
420010工程师2020-01-03
这里有一个使用摘要的dplyr
选项
库(dplyr)
df%>%
分组依据(id、类型、日期)%>%
总结(变量(美元,小时)~平均值(.x,na.rm=T))
##一个tibble:4x5
##组:id,类型[4]
#id类型日期美元小时数
#
#工程师2020-01-02 100 5
#2 1运营2020-01-02 300 12
#3第1部分2020-01-04 500 NaN
#工程师2020-01-03 200 10
甚至
df%>%分组依据(id、类型、日期)%>%汇总所有(~mean(.x,na.rm=T))
样本数据
df或者,您可以使用tidyr
中的pivot\u longer
和pivot\u wide
功能将数据集重塑为更长的格式,删除NA值,然后重塑为更宽的格式:
库(dplyr)
图书馆(tidyr)
DF%>%pivot\u更长(cols=c(美元,小时),名称\u to=“var”,值\u to=“val”)%>%
过滤器(!is.na(val))%>%pivot\u更宽(名称\u from=var,值\u from=val)
#一个tibble:4x5
id类型日期美元小时数
工程师2020-01-02 100 5
工程师2020-01-03 200 10
3.1运营2020-01-02 300 12
4 1第2020-01-04部分500 NA
非常感谢您!!非常感谢你!!非常感谢你!!
# A tibble: 4 x 5
# Groups: id, type, Date [4]
id dollar hours type Date
<dbl> <dbl> <dbl> <fct> <fct>
1 1 100 5 Engineer 2020-01-02
2 1 300 12 Operating 2020-01-02
3 1 500 NA Part 2020-01-04
4 2 200 10 Engineer 2020-01-03