我有以下数据
x y z
1 2 a
1 2
data[2,3] 是一个因素但没有显示,在数据中,它有很多这样的行。当z什么都没有时如何删除行?我的意思是删除诸如第二行之类的行。
输出应该是
x y z
1 2 a
我有以下数据
x y z
1 2 a
1 2
data[2,3] 是一个因素但没有显示,在数据中,它有很多这样的行。当z什么都没有时如何删除行?我的意思是删除诸如第二行之类的行。
输出应该是
x y z
1 2 a
好的。在这里在黑暗中刺了一下。
想象以下数据集:
mydf <- data.frame(
x = c(.11, .11, .33, .33, .11, .11),
y = c(.22, .22, .44, .44, .22, .44),
z = c("a", "", "", "f", "b", ""))
mydf
# x y z
# 1 0.11 0.22 a
# 2 0.11 0.22
# 3 0.33 0.44
# 4 0.33 0.44 f
# 5 0.11 0.22 b
# 6 0.11 0.44
根据您的标题和描述的组合(两者似乎都不能完全描述您的问题),我会解码您想要删除第 2 行和第 3 行,而不是第 6 行。换句话说,您想首先检查是否行被复制(大概只有前两列),然后,如果第三列为空,则删除该行。根据这些说明,第 5 行应保留(“z”列不为空白),第 6 行应保留(第 1 列和第 2 列的组合不重复)。
如果是这种情况,这是一种方法:
# Copy the data.frame, "sorting" by column "z"
mydf2 <- mydf[rev(order(mydf$z)), ]
# Subset according to your conditions
mydf2 <- mydf2[duplicated(mydf2[1:2]) & mydf2$z %in% "", ]
mydf2
# x y z
# 3 0.33 0.44
# 2 0.11 0.22
^^ 这些是我们要删除的数据。删除它们的一种方法是setdiff
在rownames
每个数据集上使用:
mydf[setdiff(rownames(mydf), rownames(mydf2)), ]
# x y z
# 1 0.11 0.22 a
# 4 0.33 0.44 f
# 5 0.11 0.22 b
# 6 0.11 0.44
一些示例数据:
df = data.frame(x = runif(100),
y = runif(100),
z = sample(c(letters[0:10], ""), 100, replace = TRUE))
> head(df)
x y z
1 0.7664915 0.86087017 a
2 0.8567483 0.83715022 d
3 0.2819078 0.85004742 f
4 0.8241173 0.43078311 h
5 0.6433988 0.46291916 e
6 0.4103120 0.07511076
找出缺失值的第六行。logical
您可以使用's (TRUE, FALSE)的向量进行子集化:
df[df$z != "",]
正如@AnandaMahto 评论的那样,您甚至可以检查多个条件:
df[!df$z %in% c("", " "),]