我有多个具有以下格式的数据集
head(averagetable)
Group.1 Moving Feeding Standing
1 cluster1 0.05632530 0.1722892 0.7503012
2 cluster2 0.09220779 0.2644481 0.6118506
3 cluster3 0.04863636 0.1268182 0.7993182
我对R很陌生,但是我的任务很简单:
1)我想用cluster#
列中具有最高值的行中的Group.1
来替换Standing
中的名称Standing
。
2)名称Moving/Feeding
到列Standing
的第二高值
3)名称Feeding/Moving
到列Standing
的第三个最高值。
因此输出:
print(averagetable)
Group.1 Moving Feeding Standing
1 Moving/Feeding 0.05632530 0.1722892 0.7503012
2 Feeding/Moving 0.09220779 0.2644481 0.6118506
3 Standing 0.04863636 0.1268182 0.7993182
希望这很清楚。请注意,使用order()
替换字符串不符合我的需求,因为我有多个数据框,并且值可能不同。我猜想ifelse()
是要使用的函数,但我猜想需要实现for
循环,我不确定该怎么做。
答案 0 :(得分:1)
您只需order
Standing
并替换Group.1
值
averagetables$Group.1[order(averagetables$Standing)] <-
c("Feeding/Moving", "Moving/Feeding", "Standing")
averagetables
# Group.1 Moving Feeding Standing
#1 Moving/Feeding 0.05632530 0.1722892 0.7503012
#2 Feeding/Moving 0.09220779 0.2644481 0.6118506
#3 Standing 0.04863636 0.1268182 0.7993182
如果有很多行,并且您只想更改Group.1
的前3个值中的Standing
值,则可以使用tail
进行子集
inds <- tail(order(averagetables$Standing), 3)
averagetables$Group.1[inds] <- c("Feeding/Moving", "Moving/Feeding", "Standing")
这只会更改Group.1
的第一高,第二最高和第三高值在Standing
中的值。
数据
averagetables <- structure(list(Group.1 = c("cluster1", "cluster2",
"cluster3"
), Moving = c(0.0563253, 0.09220779, 0.04863636), Feeding =
c(0.1722892,
0.2644481, 0.1268182), Standing = c(0.7503012, 0.6118506, 0.7993182
)), row.names = c("1", "2", "3"), class = "data.frame")