Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于R中的字符串删除值的范围_R_Statistics_Subset - Fatal编程技术网

基于R中的字符串删除值的范围

基于R中的字符串删除值的范围,r,statistics,subset,R,Statistics,Subset,我有一个非常巨大的数据框 我想删除某些国家(比如比利时)的所有NUTS2值,但不知道如何继续。到目前为止,唯一有效的方法是: alldata<-alldata[!(alldata$nutscode=="be21" & alldata$nutslevel=="nuts2"),] 或 既然, 但我显然写错了什么,它不起作用,它只是打印出值。我也尝试过很多其他的选择,但都不奏效 是否有一种更简单的方法可以从我的数据帧中删除包含这些特定字符串的行,而不必将同一行写入数百次?另外

我有一个非常巨大的数据框

我想删除某些国家(比如比利时)的所有NUTS2值,但不知道如何继续。到目前为止,唯一有效的方法是:

    alldata<-alldata[!(alldata$nutscode=="be21" & alldata$nutslevel=="nuts2"),]

既然, 但我显然写错了什么,它不起作用,它只是打印出值。我也尝试过很多其他的选择,但都不奏效

是否有一种更简单的方法可以从我的数据帧中删除包含这些特定字符串的行,而不必将同一行写入数百次?另外,如果您回复,请务必提供完整的答案,我在这方面是个十足的傻瓜,如果我知道如何编写一个奇特的循环或函数来为我实现这一点,我现在就已经做到了/

提前非常感谢


同样需要澄清的是:NUTS代码用于对区域进行分类,并且随着区域级别的加深,其复杂性会增加。例如,AT0是整个奥地利,AT2和AT3是NUTS1级别上的区域,AT21或AT34是NUTS2级别上更小的区域。每个国家都有自己的螺母代码,遵循相同的结构(例如比利时的BE、BE1和BE34是螺母等级0、1和2区域的示例)

仅供澄清。不同的国家有不同的标准吗?nutscode的样式是什么?如上所述,您确实从数据集中排除了所有值,其中nutscode变量的值中包含字符串“be”,nutslevel等于2。也许只有当nutscode在不同国家有所不同时,才会有人回答你的问题。人们必须将这种模式形象化。。因此,如果可能的话,给至少四个国家的nutscode。我希望所有国家的nutslevel=2。谢谢

我认为您与
grepl非常接近。
您为什么放弃第一个示例中的&construct?这对我来说很好

nutslevel <- c('nuts1', 'nuts1', 'nuts2', 'nuts2')
nutscode <- c('be2', 'o2', 'be2', 'o2')

dat <- data.frame(nutslevel, nutscode)
dat[!(grepl('be', dat$nutscode) & dat$nutslevel=='nuts2'), ]
这将根据需要排除第三行

另外,也许
子集
提供了一种更简洁的方法来实现这一点

subset(dat, !(grepl('be', nutscode) & nutslevel=='nuts2'))

需要澄清的是:NUTS代码用于对区域进行分类,越是深入到区域级别,其复杂性就越高。例如,AT0是整个奥地利,AT2和AT3是NUTS1级别上的区域,AT21或AT34是NUTS2级别上更小的区域。每个国家都有自己的NUTS代码,遵循相同的结构(例如比利时0、1和2级NUTS区域的BE、BE1和BE34)。试着运行我的示例代码,看看它是否适合您,或者您是否也有错误。除此之外,我想知道问题是否与您的基础数据有关?它是如何存储的,您是如何读取它的?你确定它们是字符串而不是因子什么的吗?好吧,我意识到现在你的代码一直在工作,我只是从来没有将它保存为新的数据帧,如果不这样做,它只会打印出值。非常感谢你的帮助@HarlandMason!与其将子集存储在
newdata
中,不如将其存储在
alldata
中,就像这样:
alldata
nutslevel <- c('nuts1', 'nuts1', 'nuts2', 'nuts2')
nutscode <- c('be2', 'o2', 'be2', 'o2')

dat <- data.frame(nutslevel, nutscode)
dat[!(grepl('be', dat$nutscode) & dat$nutslevel=='nuts2'), ]
  nutslevel nutscode
1     nuts1      be2
2     nuts1       o2
4     nuts2       o2
subset(dat, !(grepl('be', nutscode) & nutslevel=='nuts2'))