我想在一个带有前面值的向量中填入缺失值(不是NA
,只是''
!).例如,如果我将矢量定义为
vec <- c('Titanic', '', '', '', 'Donnie Darko', '', '', 'Twin Peaks',
'American Hustle', '')
Run Code Online (Sandbox Code Playgroud)
我的输出矢量将是
'Titanic', 'Titanic', 'Titanic', 'Titanic', 'Donnie Darko', 'Donnie Darko',
'Donnie Darko', 'Twin Peaks', 'American Hustle', 'American Hustle'
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
这是一个双线nzchar
和子集,应该非常有效.
# get logical vector of elements with non-empty character elements
notMissings <- nzchar(movies)
# fill in missing values
movies[notMissings][cumsum(notMissings)]
[1] "Titanic" "Titanic" "Titanic" "Titanic"
[5] "Donnie Darko" "Donnie Darko" "Donnie Darko" "Twin Peaks"
[9] "American Hustle" "American Hustle"
Run Code Online (Sandbox Code Playgroud)
这是第二种使用方法rle
.
# get run length encodings
temp <- rle(movies)
# get missing values
missings <- nchar(temp$values) == 0
# fill in missing values
temp$values[missings] <- temp$values[which(missings) - 1]
# expand
inverse.rle(temp)
[1] "Titanic" "Titanic" "Titanic" "Titanic"
[5] "Donnie Darko" "Donnie Darko" "Donnie Darko" "Twin Peaks"
[9] "American Hustle" "American Hustle"
Run Code Online (Sandbox Code Playgroud)
请注意,如果第一个元素是空字符'',则第二个方法将抛出错误.
数据
movies <- c('Titanic', '', '', '', 'Donnie Darko', '', '', 'Twin Peaks',
'American Hustle', '')
Run Code Online (Sandbox Code Playgroud)