[英]R - deleting rows from data.frame
我对编程非常陌生,有一个基本问题(我的第一个关于stackoverflow的问题:))我想从data.frame中删除一些行,并在该帐户上使用if语句。 我的代码正在运行,但是很遗憾,它没有删除正确的行,而是删除了我认为的数据框的第二行。
“ myDataVergleich”是我的data.frame的名称。 “ myData $ QUESTNNR”是确定行是否应该保留在数据帧中的列。
for(i in 1:nrow(myDataVergleich))
{if(myData$QUESTNNR[i] != "t0_mathe" | myData$QUESTNNR[i] != "t0_bio" | myData$QUESTNNR[i] != "t0_allg2" |
myData$QUESTNNR[i] != "t7_mathe_Version1" | myData$QUESTNNR[i] != "t7_bio_Version1")
{myDataVergleich <- myDataVergleich[-c(i),] }}
我究竟做错了什么?
欢迎使用堆栈溢出和R。我认为您的直觉是正确的,但存在一些问题。 首先,您说您的数据称为“ myDataVergleich”,但在循环中,您正在访问“ myData”。 因此,您可能需要在循环中将“ myData $ QUESTNNR [i]”更改为“ myDataVergleich $ QUESTNNR [i]”。
关于R的一个很棒的事情是,人们已经解决了许多问题的解决方案,按条件子集设置数据帧就是其中之一。 您应该研究tidyverse软件包家族,在这种情况下尤其是dplyr。
install.packages('dplyr')
install.packages('magrittr')
如果您想使用这些字符串保留行,则此代码将起作用
library(dplyr)
library(magrittr)
strings <- c(
"t0_mathe", "t0_bio", "t0_allg2", "t7_mathe_Version1", "t7_bio_Version1"
)
filtered_data <- myDataVergleich %>%
dplyr::filter(QUESTNNR %in% strings)
如果要保留不包含这些字符串的行,则此代码将起作用
library(dplyr)
library(magrittr)
strings <- c(
"t0_mathe", "t0_bio", "t0_allg2", "t7_mathe_Version1", "t7_bio_Version1"
)
filtered_data <- myDataVergleich %>%
dplyr::filter(!QUESTNNR %in% strings)
希望能有所帮助
我必须知道错误,QUESTNNR%in%字符串返回TRUE或FALSE并添加! 只是返回相反的意思,所以应该没问题。 您可以使用'stringr'包中的str_detect检测字符串的一部分。
library(dplyr)
library(stringr)
library(tibble)
library(magrittr)
df <- tibble(x = c('h', 'e', 'l', 'l', '0'))
df %>% dplyr::filter(str_detect(x, 'l'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.