r语言 - 如何从另一个列创建列?



我想从 df1 构建一个像 df2 这样的数据帧,始终查找值最接近 0 的列的名称: 其中 clossets_1 - 更接近 x,y 和 z 列的 0 值。 clossets_2 - 更接近 x 和 a 列的 0,因为 x 是 clossets_1 中接收最多的值。 clossets_3 - 更接近 A 列和 B 的 0 值, 因为 A 是clossets_2中接收最多的值。

DF1

df1
#  x  y  z  a  b 
#1 1  2  3  4  3 
#2 2  3  4  1  2 
#3 3  2  4  2  1 
#4 4  3  2  3  6

愿望输出:

df2 
#  x  y  z clossets_1 a clossets_2 b clossets_3
#1 1  2  3     x      4     x      3    b
#2 2  3  4     x      1     a      2    a 
#3 3  2  4     y      2     a      1    b 
#4 4  3  2     z      3     a      2    b

以下是入门的第一步:

cols = c("x","y","z")
df2 = df1
df2$clossets_1 = cols[apply(df1[,cols], 1, function(x) {which(x == min(x))})]
df2
##   x y z a b clossets_1
## 1 1 2 3 4 3          x
## 2 2 3 4 1 2          x
## 3 3 2 4 2 1          y
## 4 4 3 2 3 6          z

我以这种方式解决了它,使用@BigFinger答案的第一步和包模式中的mlv((函数在最接近的列中找到重复次数最多的值

library(DescTools) 
library(modeest) 
library(tibble) 
df1 = tibble(x = c(1,2,3,4),
y = c(2,3,2,3),
z = c(3,4,4,2),
clossest_1 = c("x","y","z")[apply(data.frame(x,y,z),1,function(x){which(x == Closest(x,0))})],
a = c(4,1,2,3),
clossest_2 = c(mlv(clossest_1),"a")[apply(data.frame(get(mlv(clossest_1)),a),1,function(x){which(x == Closest(x,0))})],
b = c(3,2,1,2),
clossest_3 = c(mlv(clossest_2),"b")[apply(data.frame(get(mlv(clossest_2)),b),1,function(x){which(x == Closest(x,0))})])
df1
# A tibble: 4 x 8
#      x     y     z clossest_1     a clossest_2     b clossest_3
#  <dbl> <dbl> <dbl> <chr>      <dbl> <chr>      <dbl> <chr>     
#1     1     2     3 x              4 x              3 b         
#2     2     3     4 x              1 a              2 a         
#3     3     2     4 y              2 a              1 b         
#4     4     3     2 z              3 a              2 b         

相关内容

  • 没有找到相关文章