2015-12-30 62 views
0

我有一张如下图所示的表格,我试图用简单的if语句仅在食物是“桔子”的情况下返回国家名称。第三列是期望的结果,第4列是我在R.r如果语句返回级别数字而不是级别文本

enter image description here

在Excel中得到公式将是:

=IF(A2="Oranges",B2,"n/a") 

我已经使用下列R-代码来生成了“oranges_country”变量:

table$oranges_country <- ifelse (Food == "Oranges", Country , "n/a") 

[按照上述图像]的代码返回电平的数目(例如,6)在所述等级列表“国家”,而塔n'国家'本身(例如“西班牙”)。我明白这是从哪里来的(下面摘录中的位置),但是使用几个嵌套的if语句时尤其是一种痛苦。

levels(Country) 
[1] "California" "Ecuador"  "France"  "New Zealand" "Peru"  "Spain"  "UK" 

必须有一个简单的方法来改变这???

的要求,在注释:dput(表)输出如下: dput(table) structure(list(Food = structure(c(1L, 1L, 3L, 1L, 1L, 3L, 3L, 2L, 2L), .Label = c("Apples", "Bananas", "Oranges"), class = "factor"), Country = structure(c(3L, 7L, 6L, 4L, 7L, 6L, 1L, 5L, 2L), .Label = c("California", "Ecuador", "France", "New Zealand", "Peru", "Spain", "UK" ), class = "factor"), Desired_If.Outcome = structure(c(2L, 2L, 3L, 2L, 2L, 3L, 1L, 2L, 2L), .Label = c("California", "n/a", "Spain"), class = "factor"), oranges_country = c("n/a", "n/a", "6", "n/a", "n/a", "6", "1", "n/a", "n/a"), desiredcolumn = c(NA, NA, 6L, NA, NA, 6L, 1L, NA, NA)), .Names = c("Food", "Country", "Desired_If.Outcome", "oranges_country", "desiredcolumn"), row.names = c(NA, -9L), class = "data.frame")

回答

0

尝试ifelse循环。首先,改变表$国家对字符()

table$Country<-as.character(Table$Country) 
table$desiredcolumn<-ifelse(table$Food == "Oranges", table$Country, NA) 

这里是我的版本:

Food<-c("Ap","Ap","Or","Ap","Ap","Or","Or","Ba","Ba") 
Country<-c("Fra","UK","Sp","Nz","UK","Sp","Cal","Per","Eq") 
Table<-cbind(Food,Country) 
Table<-data.frame(Table) 
Table$Country<-as.character(Table$Country) 
Table$DC<-ifelse(Table$Food=="Or", Table$Country, NA) 
Table 

Food Country DC 
1 Ap  Fra <NA> 
2 Ap  UK <NA> 
3 Or  Sp Sp 
4 Ap  Nz <NA> 
5 Ap  UK <NA> 
6 Or  Sp Sp 
7 Or  Cal Cal 
8 Ba  Per <NA> 
9 Ba  Eq <NA> 
+0

谢谢Max。这是我在我的代码提取上面'table $ oranges_country < - ifelse(Food ==“Oranges”,Country,“n/a”)''所做的事情。我刚刚尝试过你的轻微变体,它给出了相同的结果'> desiredcolumn [1]不适用6不适用6 1不适用' – Rob

+0

请问您可以使用dput(table)发布表的输出。如果它有很多行,那么只会给我们前10行。 – MaxPD

+0

你可以先请做--'表$国家<-as.character(表$国家)',然后运行ifelse代码。 – MaxPD

0

试试这个(如果你的表称为table):

table[table$Food=="Oragnes", ] 
+0

感谢玛塔,这的确是所谓的表!这只是返回与Orange相关的那3行的过滤表? (不知道如何在包含注释格式的表格中包含表格) – Rob

+0

如果您只想为这些选择的国家/地区列,请尝试:'table [table $ Food ==“Oragnes”,] $ Country' – Marta

+0

Ahh我明白了。但是,让我们说,在我的真实例子中,我有很多列,我试图建立复杂的嵌套if语句,以便我可以对此进行'pivot'样式分析,所以相反,我的r代码可能类似于'table $ oranges_country < - ifelse(Food ==“Oranges”,Country,ifelse(Food ==“Apples”,OtherVariable1,ifelse(Food ==“Bananas”,OtherVariable2,OtherVariable3)))''所以我认为最简单的方法是在一列。 – Rob