我在r中有一个数据框(df),并且我对两列df $ LEFT和df $ RIGHT感兴趣。我想创建两个新列,以便在df $ BEST中,每行的LEFT和RIGHT之间的数字较小。类似地,我想创建一列df $ WORST,在该列中存储最小的数字。
ID LEFT RIGHT
1 20 70
2 65 15
3 25 65
我想获得这个:
ID LEFT RIGHT BEST WORST
1 20 70 20 70
2 65 15 15 65
3 25 65 25 65
我该怎么做?
答案 0 :(得分:1)
我们可以使用pmin/pmax
来获取两列的相应最小值,最大值
transform(df, BEST = pmin(LEFT, RIGHT), WORST = pmax(LEFT, RIGHT))
# ID LEFT RIGHT BEST WORST
#1 1 20 70 20 70
#2 2 65 15 15 65
#3 3 25 65 25 65
df <- structure(list(ID = 1:3, LEFT = c(20L, 65L, 25L), RIGHT = c(70L,
15L, 65L)), class = "data.frame", row.names = c(NA, -3L))
答案 1 :(得分:1)
一种替代方法是使用apply
> df$WORST <- apply(df[,-1], 1, min)
> df$BEST <- apply(df[,-1], 1, max)
> df
ID LEFT RIGHT WORST BEST
1 1 20 70 20 70
2 2 65 15 15 65
3 3 25 65 25 65
将@akrun的方法与transform
一起使用:
> transform(df,
WORST = apply(df[,-1], 1, min),
BEST = apply(df[,-1], 1, max))