我们可以使用is.na 创建一个逻辑索引,然后根据“i1”对两个“名称”进行子集化,以替换同一行上的“持续时间”。
i1 <- is.na(df$duration)
df$duration[i1] <- df$names[i1]
df
# names duration
#1 J 97
#2 G G
#3 H 53
#4 A 23
#5 E E
#6 D D
#7 C 73
#8 F F
#9 B 37
#10 I 67
注意:这应该将“持续时间”的 class 从 numeric 更改为 character
或者这可以通过data.table 更快的方法来完成。将'data.frame'转换为'data.table'(setDT(df)),将'duration'的class更改为character,然后通过在'i'(is.na(duration))中指定条件,我们分配(:=) 'name' 中对应于 'i' 条件到 'duration' 的值。由于分配到位,它将非常有效。
library(data.table)
setDT(df)[, duration:= as.character(duration)][is.na(duration), duration:= names]
数据
df <- structure(list(names = c("J", "G", "H", "A", "E", "D", "C", "F",
"B", "I"), duration = c(97L, NA, 53L, 23L, NA, NA, 73L, NA, 37L,
67L)), .Names = c("names", "duration"), row.names = c("1", "2",
"3", "4", "5", "6", "7", "8", "9", "10"), class = "data.frame")