r - R - 基于索引值的数据帧中的条件标签,没有循环
问题描述
问题!我正在尝试根据索引在数据框中标记行。例如,我想用索引< x“A”标记所有行,索引> = x和< y“B”的所有行等。这些索引值不是恒定的,但会因文件而异我正在处理。
我有一个包含数千行的巨大数据框,所以我试图避免很多循环......我在我的数据框中创建了一列索引值,我想将这些值与值向量进行比较,以便在我的数据框中战略性地标记行。这是我想避免的结构(我试过了,它有效,它只需要永远):
for (i in 1:nrow(dataframe)){
for (j in 1:length(index_values)){
if (dataframe$Index[i]>index_values[j] & dataframe$Index[i]<index_values[j+1]{
dataframe$Label[i]='blah'
}
}
}
我尝试使用“ifelse”,但它似乎没有循环工作?这是我尝试过的,但“标签”字段没有填充任何内容。
for (i in 1:length(index_values)){
dataframe$Label <- ifelse((dataframe$Index>index_value[i] & dataframe$Index<index_value[i+1]),'blah',0)
}
有没有人对如何让“ifelse”在这种情况下工作,或者任何其他更有效的方法来解决这个问题有任何建议?谢谢!!
This is the result of dput(head(dataframe, 20))... the column I want to populate is the one called "PEPMASSLabel", you can ignore the one that says "Label2":
structure(list(Data = c("BEGIN IONS", "PEPMASS=81.52200",
"MSLEVEL=1", "CHARGE=1+", "100.1120 4121.67 ", "101.0592 3174.14 ",
" 102.1273 13152.36 ", " 103.9552 3842.30 ",
" 104.1066 4018.44 ", " 111.0437 3431.08 ",
" 113.9635 4037.19 ", " 114.0912 7486.78 ",
" 116.0708 4411.26 ", " 117.0541 3008.86 ",
" 118.0862 37381.12 ", " 118.1225 8411.46 ",
" 124.0241 12898.76 ", " 127.0385 6135.08 ",
" 128.9509 5558.22 ", " 129.0407 8047.48 "),
PEPMASSLabel = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Index = 1:20, PEPMASSLabel2 =
c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names =
c("Data", "PEPMASSLabel", "Index", "PEPMASSLabel2"), row.names = c(NA,
20L), class = "data.frame")
我希望“标签”列由不同的文本字符串填充。
解决方案
dplyr::case_when 也可以在这里应用,虽然不如cut
.
# define these for each file
breaks <- c(2, 3, 7, 10, 15)
Data <- Data %>%
mutate(Label = case_when(Index < breaks[1] ~ "A",
Index < breaks[2] ~ "B",
Index < breaks[3] ~ "C",
Index < breaks[4] ~ "D",
Index < breaks[5] ~ "E",
TRUE ~ "Z"))
> head(Data)
Data PEPMASSLabel Index PEPMASSLabel2 Label
1 BEGIN IONS 0 1 0 A
2 PEPMASS=81.52200 0 2 0 B
3 MSLEVEL=1 0 3 0 C
4 CHARGE=1+ 0 4 0 C
5 100.1120 4121.67 0 5 0 C
6 101.0592 3174.14 0 6 0 C
推荐阅读
- javascript - 导航栏不会更新道具更改
- javascript - TypeError:无法将属性“onscroll”设置为 null
- javascript - 如何在 javascript 中存储 API 响应数据以进行分析
- r - 在闪亮的数据表中进行活动重置排序或替换数据表按钮
- spring-boot - 即使添加了 ComponentScan 注释,控制器中也缺少 bean
- django - Django 在我的网站中没有显示 ValidationError
- git - 为什么 npx create-react-app 在 VS Code 中自动创建了一个名为 HeaderTwo 的分支
- node.js - 使用打字稿进行云函数查询
- javascript - 试图在商店频道禁用短信
- javascript - 有一种方法可以使用 DOMParser().parseFromString() 来创建元素 HTML,而不会创建标签,并且?