我有一个大约40列的数据框架,第二列,数据[2]包含该行数据其余数据所描述的公司名称。但是,根据年份,公司的名称不同(2009年数据落后09,2010年没有)。

我希望能够将数据归为子集,以便我可以立即进行两年。这是我想做的示例...

subset(data, data[2] == "Company Name 09" | "Company Name", drop = T) 

本质上,我在子集功能中使用或操作员很难使用。

但是,我尝试了其他替代方案:

subset(data, data[[2]] == grep("Company Name", data[[2]]))

也许有一种更简单的方法可以使用字符串函数进行操作?

任何想法都将被插入。

有帮助吗?

解决方案

首先(就像乔纳森(Jonathan)在评论中所做的那样)要参考第二列 data[[2]] 或者 data[,2]. 。但是,如果您使用子集,则可以使用列名: subset(data, CompanyName == ...).

对于您的问题,我将做一个:

subset(data, data[[2]] %in% c("Company Name 09", "Company Name"), drop = TRUE) 
subset(data, grepl("^Company Name", data[[2]]), drop = TRUE)

第二我使用 grepl (带有R 2.9版的引入),该版本返回逻辑向量 TRUE 比赛。

其他提示

几件事:

1)模型数据很有用,因为我们不知道您面对什么。如果可能的话,请提供数据。也许我误解了下面的内容?

2)不要使用 [[2]] 要索引您的数据。帧,我认为[“ colname”]更清楚

3)如果唯一的区别是名称中的“ 09”,则只需将其重新纠正:

R> x1 <- c("foo 09", "bar", "bar 09", "foo")
R> x2 <- gsub(" 09$", "", x1)
[1] "foo" "bar" "bar" "foo"
R> 

现在,您应该能够在直接转换的数据上进行子集:

R> data <- data.frame(value=1:4, name=x1)
R> subset(data, gsub(" 09$", "", name)=="foo")
  value   name
1     1 foo 09
4     4    foo
R> 

您也可以用regexp'ED值替换名称列。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top