首页 > 解决方案 > R从数据框中的列和行中提取值

问题描述

我有这样的数据框

#dt
#   one two row MAX_row three four
#1: a   1   0   2       yes   yes
#2: a   2   2   2       yes   yes
#3: a   3   0   2       no    yes
#4: b   1   0   5       yes   no
#5: b   2   5   5       no    no
#6: b   3   0   5       no    no

创建变量 row 和 MAX_row 我生成的代码如下:

dt$row <-ifelse(dt$two == 2,rownames(dt), 0)
dt <- dt %>% group_by(one) %>% mutate(MAX_row=max(row))

我现在要做的是用第三列中的行中的值填写第四列。行号在列 MAX_row 中指示。因此,在第四列中,第一列中带有“a”的行应该是第三列中第 2 行的值,就像我在 dt 中显示的那样。我认为如下代码可以,但它会产生奇数:

dt$four <- ifelse(dt$one=='a',dt$three[dt$MAX_row],0)

有任何想法吗?

标签: rdataframedata-extraction

解决方案


如果我理解正确,您从三列开始onetwo并且three我认为rowMAX_row是为达到 until 而创建的临时变量four

我们可以在不需要创建这些变量的情况下获得预期的输出。

library(dplyr)

df %>%
  group_by(one) %>%
  mutate(four = three[which.max(two == 2)])

#  one     two three four 
#  <fct> <int> <fct> <fct>
#1  a         1 yes   yes  
#2  a         2 yes   yes  
#3  a         3 no    yes  
#4  b         1 yes   no   
#5  b         2 no    no   
#6  b         3 no    no   

row这仍然可以在不创建and的情况下提供您预期的输出MAX_row

数据

df <- structure(list(one = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label 
 = c("a", 
"b"), class = "factor"), two = c(1L, 2L, 3L, 1L, 2L, 3L), three = 
structure(c(2L, 
2L, 1L, 2L, 1L, 1L), .Label = c("no", "yes"), class = "factor")), 
row.names = c("1:", 
"2:", "3:", "4:", "5:", "6:"), class = "data.frame")

推荐阅读