rpl*_*rpl 2 if-statement r subset
我仍然在学习R并且碰到了一些超出我的感受的东西.我花了2个小时试图自己搞清楚并且失败了:-(.
我有一个data.frame(让我们想到iris,例如)我想用ifelse进行子集化.如果第一行是"setosa",我想要一个带有前50行的data.frame,如果没有,则需要接下来的100行.见下文.
data (iris)
a <- ifelse(iris$Species[1] == "setosa", iris[1:50,],iris[51:150,])
Run Code Online (Sandbox Code Playgroud)
我希望上面的内容能够返回原始data.frame的一个子集,但实际上我得到的是
[[1]]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1 5.4 5.1 4.6
[24] 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8
[47] 5.1 4.6 5.3 5.0
Run Code Online (Sandbox Code Playgroud)
我根本就没弄明白......
你可以在ifelse文档中阅读
ifelse作为返回具有相同形状的值test填充有从任一选择是或元素没有根据的元素是否test是TRUE或FALSE.
因此,如果test是向量,则返回向量,如果它是单个值,则返回单个值等.如果提供错误的参数,则会产生垃圾结果.举个例子
> ifelse(1:10<5, 1, 0)
[1] 1 1 1 1 0 0 0 0 0 0
> ifelse(1:10<5, 0, 1:10)
[1] 0 0 0 0 5 6 7 8 9 10
> ifelse(TRUE, 1, 0)
[1] 1
> ifelse(TRUE, 1:10, 0)
[1] 1
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你应该使用
if (condition) ... else ...
Run Code Online (Sandbox Code Playgroud)
的ifelse和if ... else ...不同的功能,ifelse是不是一个班轮为其他功能.什么ifelse所做的是它经历了一些对象,并基于此的一些替代对象的值test返回TRUE或FALSE为每个被替换值.