如何使用 purrr 来限制列元素不是列表的行
How can I use purrr to limit rows where column element is not a list
我有一个 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
这是使用 lengths
和子集化的基础 R 方法。 date_of_birth 列中包含一个以上元素的任何元素都将被删除
dfNew <- df[lengths(df$date_of_birth) < 2,]
哪个returns
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)
如果您希望删除 date_of_birth
字段类型为 list
的任何行,以下应该是一个不错的解决方案:
df[sapply(df$date_of_birth, function(x) typeof(x)!="list"),]
编辑:
Imo 的评论应该将上述解决方案缩短如下:
df[!sapply(df$date_of_birth, is.list),]
希望对您有所帮助。
我有一个 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
这是使用 lengths
和子集化的基础 R 方法。 date_of_birth 列中包含一个以上元素的任何元素都将被删除
dfNew <- df[lengths(df$date_of_birth) < 2,]
哪个returns
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)
如果您希望删除 date_of_birth
字段类型为 list
的任何行,以下应该是一个不错的解决方案:
df[sapply(df$date_of_birth, function(x) typeof(x)!="list"),]
编辑:
Imo 的评论应该将上述解决方案缩短如下:
df[!sapply(df$date_of_birth, is.list),]
希望对您有所帮助。