我在R中,我只想从df1中提取数字. 例如,我有: df1 <- data.frame( column1 = c("Any[12, 15, 20]", "Any[22, 23, 30]"), column2 = c("Any[4, 17]", "Any[]"), stringsAsFactors = F )

我想要一个新的df,它将括号内的整数乘以行号,并保留与其对应的列信息.

例如: New_df可能如下所示

Time Channel
12 column1
15 column1
20 column1
44 column1
46 column1
60 column1
8 column2
34 column2

我不需要保留任何"NA"值,例如,如果有任何[]为空. 有谁知道这是不是可能的? 我有大量的这种格式的数据,所以我真的不能手动做很多事情. 干杯!

我已经试过了: new_df$Time <- as.integer(df1$column1)个 而这只是一片空白.

我还试过: new_df$Time <- str_extract_all(new_df$Time, "\\d+" ) %>% lapply(function(x) as.integer(x)) %>% sapply(function(x) if.else(length(x) >0, x, NA) )

然后才返回每个括号内的第一个整数. 例如:

Time Channel
12 column1
44 column1
8 column2

推荐答案

library(dplyr)
library(purrr)
library(stringr)
library(tidyr)

df1|>
  mutate(across(everything(), \(x) imap(str_extract_all(x, "\\d+"), ~ as.numeric(.x) * .y))) |>
  pivot_longer(everything(), cols_vary = "slowest", names_to = "Time", values_to = "Channel") |>
  unnest_longer(Channel)

How it works

这与您最初try 的方法类似,只是我使用purrr::imap而不是lapply.这里的优点是,imap允许您访问列表元素名称(.y),在本例中,它是除了列表元素(.x)之外的行号.这使得乘法步骤变得简单.

str_extract_all从列中提取所有数字,并将这些数字输出到列表中:

str_extract_all(df1$column1, "\\d+")
[[1]]
[1] "12" "15" "20"

[[2]]
[1] "22" "23" "30"

imap遍历该列表并执行乘法运算:

imap(str_extract_all(df1$column1, "\\d+"), ~ as.numeric(.x) * .y)
[[1]]
[1] 12 15 20

[[2]]
[1] 44 46 60

然后,另外两个管道将对数据进行整形.

Output

  Time    Channel
  <chr>     <dbl>
1 column1      12
2 column1      15
3 column1      20
4 column1      44
5 column1      46
6 column1      60
7 column2       4
8 column2      17

R相关问答推荐

将带有范围的字符串转换为R中的数字载体

无法运行通过R中的Auto.arima获得的ARIMA模型

具有多个依赖变量/LHS的逻辑模型

按R中的组查找相邻列的行累积和的最大值

R等效于LABpascal(n,1)不同的列符号

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

如何在Chart_Series()中更改轴值的 colored颜色 ?

如何使用STAT_SUMMARY向ggplot2中的密度图添加垂直线

将数字转换为分钟和秒

如何删除最后一个可操作对象

WRS2包中带有bwtrim的简单ANOVA抛出错误

将具有坐标列表列的三角形转换为多个多边形

通过初始的shiny 应用更新部署的shiny 应用的数据和参数,其中部署的应用程序显示为URL

将多个列合并为一个列的有效方法是什么?

多元正态分布的计算

数值型数据与字符混合时如何进行绑定

以任意顺序提取具有多个可能匹配项的组匹配项

把代码写成dplyr中的group_by/摘要更简洁吗?

将Geojson保存为R中的shapefile

如何根据每个子框架中分类因子的唯一计数来过滤子框架列表?