R语言 我想获取所有有下降趋势的条目

whhtz7ly  于 2023-02-26  发布在  其他
关注(0)|答案(2)|浏览(145)

数据的格式如下所示。所需的输出应该是column_id为c,f,h,l,m的 Dataframe 。

t(apply(x, 1, diff) >= 0)

但我一直收到错误消息
"r [i1]-r [-长度(r):-(长度(r)-滞后+1L)]中的错误:二元运算符的非数字参数"

l5tcr1uw

l5tcr1uw1#

您所得到的特定错误是因为您的第一列不是数值,但您试图在整行中执行diff。例如,R不知道如何计算"a"和1之间的差值。在本例中,我们需要将x[-1]而不是x传递给apply。因为我们不想在diff计算中包含id列。
从你对期望输出的描述来看,你对"下降趋势"的定义有点奇怪,如果你对每一行进行线性回归,那么你会在id为b、c、f、h、l和m的行中得到下降趋势:

x$id[apply(x[-1], 1, \(x) lm(x ~ seq_along(x))$coef[2] < 0)]
#> [1] "b" "c" "f" "h" "l" "m"

在我看来,这是对"下降趋势"的最佳定义,但它与你的期望并不完全相符,相反,你可以通过找出一行中没有增长且至少有一个下降的行来获得你想要的输出:

x$id[apply(x[-1], 1, \(x) !any(diff(x) > 0) & any(diff(x) < 0))]
#> [1] "c" "f" "h" "l" "m"
    • 所用数据**

通过使用数据的"图像"而不仅仅是将数据作为文本包含在内,意味着任何想帮助您的人都必须手工转录您的图像。

x <- data.frame(id = letters[1:13], 
                `2` = c(1,1,3,1,1,2,3,9,1,1,1,2,2),
                `3` = c(3,2,2,1,1,1,3,4,2,1,1,1,2),
                `4` = c(13,0,2,1,1,0,4,0,2,2,1,0,1), check.names = FALSE)
lnvxswe2

lnvxswe22#

如果这是你的数据

set.seed(42)
mat <- t(sapply(letters[1:12], function(x) rbind(sample(10, 3))))

mat
  [,1] [,2] [,3]
a    1    5   10
b    9    4    2
c   10    1    8
d    8    7    4
e    9    5    6
f    4    2    7
g    3    9    1
h    4    5    7
i    5    4    2
j    8    3    2
k    1    8    6
l    6    8    4

获取递减行

t(t(mat)[, colSums(diff(t(mat)) <= 0) == 2])
  [,1] [,2] [,3]
b    9    4    2
d    8    7    4
i    5    4    2
j    8    3    2

作为 Dataframe

data.frame(t(t(mat)[, colSums(diff(t(mat)) <= 0) == 2]))
  X1 X2 X3
b  9  4  2
d  8  7  4
i  5  4  2
j  8  3  2

相关问题