根据列对行进行排序?

时间:2021-05-14 08:19:17

标签: r csv sorting row columnsorting

我在 R 中有一个 csv,其中包含下表:

df1

<头>
开始 效率 开始 效率 结束
9955 0 9955 25 5848
474909 0 474909 35 3948
90342 25 84384
94209 55 99393

我想用正确的效率替换与起始列对应的假零效率,以便我的最终结果如下所示:

df2

<头>
开始 效率 结束
9955 25 5848
474909 35 3948
90342 25 84384
94209 55 99393
df1 <- data.frame(
  Start = c("9955", "474909", "90342", "94209"),
  Efficiency = c("0", "0", "25", "55"), 
  Start = c("9955", "474909"),
  Efficiency = c("25", "35"), 
  End = c("5848", "3948", "84384", "99393"), stringsAsFactors = F)
df2 <- data.frame(
  Start = c("9955", "474909", "90342", "94209"),
  Efficiency = c("25", "35", "25", "55"),
  End = c("5848", "3948", "84384", "99393"), stringsAsFactors = F)

1 个答案:

答案 0 :(得分:1)

R 不喜欢具有相同名称的列,因此重复的列名称变为 Start.1Efficiency.1。您可以将 0 值替换为 NA 并使用 coalesce

library(dplyr)

df1 %>%
  mutate(across(contains('Efficiency'), na_if, 0)) %>%
  transmute(Start, Efficiency = coalesce(Efficiency, Efficiency.1))

#   Start Efficiency
#1   9955         25
#2 474909         35
#3  90342         25
#4  94209         55