R 添加一列,显示前两列是否包含0

R 添加一列,显示前两列是否包含0,r,function,dataframe,loops,lapply,R,Function,Dataframe,Loops,Lapply,我有一个名为dat的data.frame。我想在其中添加一个名为dif的新列。然后,在每一行中,如果lower和upper范围包括0(例如,第一行-0.41到0.1),我希望dif值显示FALSE,否则(例如,0.10到0.2第二行)TRUE 对于任何类似的data.frame,这是否可以在R中实现(以下是一个玩具示例,功能性答案值得赞赏) dat您可以使用dplyr::between: 库(dplyr) dat%>% 行() 变异(dif=!介于(0、更低、更高)之间) 输出 #一个tibl

我有一个名为
dat
的data.frame。我想在其中添加一个名为
dif
的新列。然后,在每一行中,如果
lower
upper
范围包括0(例如,第一行
-0.41
0.1
),我希望
dif
值显示
FALSE
,否则(例如,
0.10
0.2
第二行)
TRUE

对于任何类似的data.frame,这是否可以在R中实现(以下是一个玩具示例,功能性答案值得赞赏)


dat您可以使用
dplyr::between

库(dplyr)
dat%>%
行()
变异(dif=!介于(0、更低、更高)之间)
输出

#一个tible:3 x 3
#顺时针:
上下dif
1-0.41 0.1错误
2 0.1 0.2正确
3-0.20.3错误
您可以使用:

transform(dat, dif = lower > 0 | upper < 0)

#  lower upper   dif
#1 -0.41   0.1 FALSE
#2  0.10   0.2  TRUE
#3 -0.20   0.3 FALSE
transform(dat,dif=lower>0 | upper<0)
#上下dif
#1-0.41 0.1错误
#2 0.10 0.2正确
#3-0.20 0.3假

我们可以从
dplyr

library(dplyr)
mutate(dat, dif = lower > 0 | upper < 0)

下面是另一个使用
do.call
*

dat$dif <- do.call("*", dat) > 0

啊!!有一个问题,我的实际数据有行名,应用您的解决方案会删除行名!这是真的,提迪沃斯。您可以通过使用
dat%>%mutate(rn=row.names(.),.before=everything())
启动链来解决这个问题。但是,除非你致力于保持一切井井有条,否则在你的情况下,这是一个不必要的额外步骤。保持船名是至关重要的。我正在进行多重比较,唯一让用户不会对输出感到困惑的是行名。谢谢,不过我会支持你的解决方案。明白了——只是说行名实际上只是另一种列,从这个意义上说,保留它们并不难——特别是对于多重比较而言。数据帧索引没有像Python那样在R中获得特权状态。因此,整个tidyverse框架鼓励将数据移动到列格式,包括行名/索引。但这更像是一种哲学立场,而不是一种实践立场,我认为,@Ronak Shah的解决方案提供了一种简单的保留行名的base R方法,这是一个伟大而更好的解决方案。@Rnoruzian谢谢。我展示了一个
Map
方法,以防对不同的列进行多个不同的比较
Reduce(`|`, Map(function(x, y)  match.fun(y)(x, 0), dat, c(">", "<")))
#[1] FALSE  TRUE FALSE
dat$dif <- do.call("*", dat) > 0
> dat
    lower upper   dif
a 1 -0.41   0.1 FALSE
a 2  0.10   0.2  TRUE
a 3 -0.20   0.3 FALSE