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
2条答案
按热度按时间l5tcr1uw1#
您所得到的特定错误是因为您的第一列不是数值,但您试图在整行中执行
diff
。例如,R不知道如何计算"a"和1之间的差值。在本例中,我们需要将x[-1]
而不是x
传递给apply
。因为我们不想在diff
计算中包含id
列。从你对期望输出的描述来看,你对"下降趋势"的定义有点奇怪,如果你对每一行进行线性回归,那么你会在id为b、c、f、h、l和m的行中得到下降趋势:
在我看来,这是对"下降趋势"的最佳定义,但它与你的期望并不完全相符,相反,你可以通过找出一行中没有增长且至少有一个下降的行来获得你想要的输出:
通过使用数据的"图像"而不仅仅是将数据作为文本包含在内,意味着任何想帮助您的人都必须手工转录您的图像。
lnvxswe22#
如果这是你的数据
获取递减行
作为 Dataframe