Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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_Dataframe - Fatal编程技术网

通过列值比较确定R数据帧行值

通过列值比较确定R数据帧行值,r,dataframe,R,Dataframe,我试图比较C列中的值,并返回与它们关联的行。例如,比较C列中的前两个值。如果第一个值大于第二个值,则返回数据帧中的前两行。如果第一个值不大于第四个值,则跳到下一组,比较并查看C列中的第三个值是否大于第四个值。如果是这种情况,则返回第3行和第4行。如果没有,跳到下一组 我一直在与dplyr中的filter函数争吵,但运气不好 下面是一个示例数据帧 set.seed(99) DF <- data.frame(abs(rnorm(10)), abs(rnorm(10)), abs(rnorm(1

我试图比较C列中的值,并返回与它们关联的行。例如,比较C列中的前两个值。如果第一个值大于第二个值,则返回数据帧中的前两行。如果第一个值不大于第四个值,则跳到下一组,比较并查看C列中的第三个值是否大于第四个值。如果是这种情况,则返回第3行和第4行。如果没有,跳到下一组

我一直在与
dplyr
中的
filter
函数争吵,但运气不好

下面是一个示例数据帧

set.seed(99)
DF <- data.frame(abs(rnorm(10)), abs(rnorm(10)), abs(rnorm(10)))
colnames(DF) <-c("A", "B", "C")
DF
set.seed(99)

DF这里有一个基本的
R
解决方案,您可以尝试在其中根据条件找到每两行的索引,然后在数据帧上执行子集:

ind <- which(DF$C[c(T, F)] > DF$C[c(F, T)])  # check whether the odd rows are larger than
# the even rows and find out the index
DF[c(2*ind-1, 2*ind), ]   # subset the data frame based on index for every two rows
#            A         B         C
# 1  1.6866933 0.6886403 1.1231086
# 9  0.8781335 2.1689560 1.3686023
# 2  0.8377870 0.5539177 0.4028848
# 10 0.8215811 1.2079620 0.2257710
ind DF$C[C(F,T)])#检查奇数行是否大于
#计算偶数行并找出索引
DF[c(2*ind-1,2*ind),]#根据每两行的索引对数据帧进行子集
#A、B、C
# 1  1.6866933 0.6886403 1.1231086
# 9  0.8781335 2.1689560 1.3686023
# 2  0.8377870 0.5539177 0.4028848
# 10 0.8215811 1.2079620 0.2257710

您可以从
zoo
软件包中使用
rollapply

library(zoo)
ind <- rep(rollapply(DF$C, 2, by = 2, which.max) == 1, each = 2)
DF[ind,]
            A         B          C
#1  1.52984334 2.0127251 1.70922539
#2  1.96454540 0.2887642 0.52301701
#5  1.15765833 0.2866493 1.72702076
#6  0.80379719 1.0945894 0.72269558
#7  1.52239099 0.5296913 2.04080511
#8  0.01663749 0.3593682 0.88601771
#9  0.12672258 0.4110257 0.19165526
#10 0.27740770 0.1950477 0.01378397
图书馆(动物园)
ind rollapply()函数似乎最适合我的应用程序。原因是我需要将其扩展到更大的运行窗口,并定义不同的条件以返回指定的行。我可以定义自己的函数并替换which.max来定义它返回的内容。