我有一个像这样的 Dataframe
df = data.frame(day = c("1", NA, NA, NA, NA, "2", NA, NA, NA),
Unit = c("unit1", NA, NA, NA, "unit2", "unit1", NA, NA, "unit2"),
Problem = c("Oil", "Engine", "Electric", NA, NA, "Oil", "Power", NA, NA),
duration = c(2, 5, 1, NA, NA, 1.5, 3, NA, NA))
row 1:5为day1,6:9为day2,如果同一列中有重复值,则值为NA。
我试着用
df %>%
pivot_wider(names_from = Problem, values_from = duration)
但是它不工作,我期望的df是这样的
df1 = data.frame(day = c("1", "1", "2", "2"),
Unit = c("unit1", "unit2", "unit1", "unit2"),
Oil = c(2, 0, 1.5, 0),
Engine = c(5, 0, 0, 0),
Electric = c(1, 0, 0, 0),
Power = c(0, 0, 3, 0),
NoProblem = c(0, 0, 0, 0))
2条答案
按热度按时间flvtvl501#
我们用先前的非NA元素对NA进行
fill
,得到distinct
行,并用pivot_wider
重新整形为宽toiithl62#
基本上,首先用
zoo::na.locf
填充日和单位,然后用reshape
填充。在此引发警告,因为
unit2
没有问题。可以是具有
0
的replace
d,但这样做并不正确,而且它们实际上并不重要,因为您经常可以在执行以下计算时使用
na.rm