示例数据:
df1 <- data.frame(name1=c("nd:f","nd:i","nd:c","nd:g","b:rd"),name2=c("21-12-2001","name","-",15,"-"))
df2 <- data.frame(name1=c("nd:i","nd:c","nd:g","nd:y","a:nd"),name2=c("11-01-2001","name",3,"-","-"))
lt <- list(df1,df2)
如何删除列表中给定固定间隔的"-"
符号name2
?:
df1$name2[2:3] # for elements 2:3 use gsub("-","",x)
并将更正的(gsub)值存储回lt
列表。
答案 0 :(得分:3)
也许您可以尝试以下内容:
lapply(rapply(lt, function(x)
gsub("^-$", "", x), how = "list"),
as.data.frame)
# [[1]]
# name1 name2
# 1 nd:f 21-12-2001
# 2 nd:i name
# 3 nd:c
# 4 nd:g 15
# 5 b:rd
#
# [[2]]
# name1 name2
# 1 nd:i 11-01-2001
# 2 nd:c name
# 3 nd:g 3
# 4 nd:y
# 5 a:nd
尽管rapply
可以将数据保持为list
,但data.frame
属性仍然丢失(因此额外的lapply(..., as.data.frame)
。
在"^_$"
中使用gsub
作为我们的模式,我们会说要找到那种模式。日期不会受到影响。
或许更好的选择是将"-"
转换为NA
。为此,您可以从my makemeNA
function尝试my "SOfun" package。
要使用这种方法,您只需执行以下操作:
library(SOfun)
lapply(lt, makemeNA, "-")
# [[1]]
# name1 name2
# 1 nd:f 21-12-2001
# 2 nd:i name
# 3 nd:c <NA>
# 4 nd:g 15
# 5 b:rd <NA>
#
# [[2]]
# name1 name2
# 1 nd:i 11-01-2001
# 2 nd:c name
# 3 nd:g 3
# 4 nd:y <NA>
# 5 a:nd <NA>