r - 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)
有任何想法吗?
解决方案
如果我理解正确,您从三列开始one
,two
并且three
我认为row
和MAX_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")
推荐阅读
- security - 如何为 SOAP Web 服务实现 JWT(JSON Web 令牌)?
- java - BranchSDK:用户会话尚未初始化
- ios - 当应用程序终止时,BLE 设备如何调用应用程序
- tensorflow - 如何使用 tqdm 使用 tf.data.Dataset api 可视化训练步骤的进度?
- android - 在由 Room 库创建的 SQLite 数据库所在的 Android 设备上
- c# - 在添加一些为空的新字段时,无法将对象的错误从 DBNull 转换为其他类型?
- angular - 路由更改时组件之间的 BehaviorSubject
- node.js - 从多个集合中填充 Mongoose 文档
- c# - 如果可能,Task.WhenAll 会同时执行任务吗?
- android - 在 Android Oreo 中禁用滑动删除通知