当前位置: 首页 > 知识库问答 >
问题:

如何删除数据框中的行?

方苗宣
2023-03-14

我有一个名为“mydata”的数据框,看起来像这样:

   A  B  C   D 
1. 5  4  4   4 
2. 5  4  4   4 
3. 5  4  4   4 
4. 5  4  4   4 
5. 5  4  4   4 
6. 5  4  4   4 
7. 5  4  4   4 

我想删除第2、4、6行。例如,像这样:

   A  B  C   D
1. 5  4  4  4 
3. 5  4  4  4 
5. 5  4  4  4 
7. 5  4  4  4 

共有3个答案

叶淇
2023-03-14

对于快速和不准确的分析,可以删除数据的行。根据最上面的答案,用数字框起来。即。,

newdata <- myData[-c(2, 4, 6), ] 

但是,如果您试图编写一个健壮的数据分析脚本,通常应该避免按数字位置删除行。这是因为数据中的行顺序将来可能会更改。数据处理的一般原则。框架表或数据库表是指行的顺序应该无关紧要。如果顺序确实重要,则应将其编码到数据中的实际变量中。框架

例如,假设您导入了一个数据集,并在检查数据并确定要删除的行的行号后按数字位置删除了行。然而,在稍后的某个时候,您将进入原始数据,并查看周围的数据并重新排序。您的行删除代码现在将删除错误的行,更糟糕的是,您不太可能收到任何错误警告您已经发生了这种情况。

更好的策略是基于行的实质性和稳定属性删除行。例如,如果您有一个id列变量来唯一地标识每个案例,那么您可以使用它。

newdata <- myData[ !(myData$id %in% c(2,4,6)), ]

其他时候,您将有一个可以指定的正式排除标准,您可以使用R中的许多子集工具之一来排除基于该规则的情况。

史高阳
2023-03-14

您还可以使用所谓的布尔向量,又名逻辑

row_to_keep = c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE)
myData = myData[row_to_keep,]

请注意, 运算符充当NOT,即!真==假

myData = myData[!row_to_keep,]

与@mrwab的答案(1 btw:)相比,这似乎有点麻烦,但是逻辑向量可以动态生成,例如,当列值超过某个值时:

myData = myData[myData$A > 4,]
myData = myData[!myData$A > 4,] # equal to myData[myData$A <= 4,]

可以将布尔向量转换为索引向量:

row_to_keep = which(myData$A > 4)

最后,一个非常巧妙的技巧是,您不仅可以将这种子集用于提取,还可以用于赋值:

myData$A[myData$A > 4,] <- NA

其中列A被指定为NA(不是数字),其中A超过4。

东门城
2023-03-14

关键的想法是形成一组要删除的行,并保留该组的补码。

在R中,集合的补码由“-”运算符给出。

因此,假设数据。帧称为myData:

myData[-c(2, 4, 6), ]   # notice the -

当然,如果您想完全删除这些行,请不要忘记重新分配myData-否则,R只会打印结果。

myData <- myData[-c(2, 4, 6), ]
 类似资料:
  • 本文向大家介绍如何删除R数据框中的行?,包括了如何删除R数据框中的行?的使用技巧和注意事项,需要的朋友参考一下 这可以通过使用方括号来完成。 示例 假设我们要删除第4、7和9行。我们将执行以下操作-

  • 本文向大家介绍如何从R数据框中删除空行?,包括了如何从R数据框中删除空行?的使用技巧和注意事项,需要的朋友参考一下 在调查或任何其他数据收集媒介期间,无法从所有单位获取所有信息。有时我们得到部分信息,有时什么也没有。因此,数据中的某些行可能完全为空白,而某些行可能具有部分数据。可以删除空白行,并使用有助于处理缺失信息的方法填充其他空值。 示例 考虑下面的数据框,它缺少一些行和一些值- 在这里,我们

  • 问题内容: 我有2个数据框,一个命名为USERS,另一个命名为EXCLUDE。他们两个都有一个名为“电子邮件”的字段。 基本上,我要删除EXERSUDE中包含电子邮件的USERS中的每一行。 我该怎么做? 问题答案: 您可以将和条件一起使用,通过以下方式反转布尔值: 另一个解决方案:

  • 问题内容: 我遇到了一个看似简单的问题:在熊猫数据框中删除唯一的行。基本上与的相反。 假设这是我的数据: 当A和B唯一时,我想删除行,即我只保留行1和2。 我尝试了以下方法: 但是我只能得到第2行,因为唯一性是0、1和3! 问题答案: 选择所有重复行的解决方案: 您可以使用子集和参数来选择所有重复项: 解决方案: 对所有唯一行进行了一些修改的解决方案:

  • 我有一个数据帧df: 然后我想删除列表中指示的具有某些序列号的行,假设这里是然后离开: 如何或什么功能可以做到这一点?

  • 我想按条件从Tarantool空间删除数据。我想达到的结果等于SQL查询: 当我使用此查询时,它以错误结束: 我有空