我有一个data.frame,df,其中一列有条目或列表
我想使用purrr包或其他方法来消除第二行
df <- structure(list(member_id = c("1715", "2186", "2187"), date_of_birth = list(
"1953-12-15T00:00:00", structure(list(`@xsi:nil` = "true",
`@xmlns:xsi` = "http://www.w3.org/2001/XMLSchema-instance"), .Names = c("@xsi:nil",
"@xmlns:xsi")), "1941-02-16T00:00:00")), .Names = c("member_id",
"date_of_birth"), row.names = c(1L, 8L, 9L), class = "data.frame")
TIA
答案 0 :(得分:1)
这是使用lengths
和子集化的基本R方法。 date_of_birth列中具有多个元素的任何元素都将被删除
dfNew <- df[lengths(df$date_of_birth) < 2,]
返回
dfNew
member_id date_of_birth
1 1715 1953-12-15T00:00:00
9 2187 1941-02-16T00:00:00
请注意,dfNew$date_of_birth
仍然是类型列表,这可能会导致问题。您可以使用unlist
解决此问题。
dfNew$date_of_birth <- unlist(dfNew$date_of_birth)
答案 1 :(得分:1)
如果您要删除date_of_birth
字段类型为list
的任何行,则以下内容应该是一个不错的解决方案:
df[sapply(df$date_of_birth, function(x) typeof(x)!="list"),]
编辑:
Imo的评论应该缩短上述解决方案如下:df[!sapply(df$date_of_birth, is.list),]
我希望这会有所帮助。