如何使用
strsplit
在 R 中拆分文本字符串,然后复制并粘贴到列中?
我正在尝试在导入 Excel 文件后拆分文本字符串,并添加一个输出,即将拆分内容粘贴到新列上。
这是我到目前为止所拥有的:
> column_1<-head(sample_file,n=10)
> column_1
# A tibble: 10 x 13
Name Last PxChg `Px%Chg` Vol `Volm%Chg` OInt `OI%Chg` IVM `IV%Chg` Ntnl
<chr> <dbl> <chr> <chr> <dbl> <chr> <dbl> <chr> <chr> <chr> <dbl>
1 TSLA US 1~ 1.49 -0.31 -17.22 172122 34.24 46048 3.37 41.9~ 5.39 4.12e9
2 TSLA US 1~ 0.62 -0.23 -27.06 157765 31.17 30183 19.71 43.8~ 7.5 3.78e9
3 TSLA US 1~ 3.75 -0.95 -20.21 139902 68.69 14796 52.33 40.6~ 6.17 3.35e9
4 TSLA US 1~ 0.98 -0.27 -21.6 110129 120.77 21548 0.72 42.6~ 7.06 2.64e9
5 TSLA US 1~ 5.23 -0.87 -14.26 88546 200.2 3878 96.26 40.9~ 3.49 2.12e9
6 AAPL US 1~ 0.27 -0.45 -62.5 87678 -16.01000~ 26170 16.8 16.3~ 5.61 1.69e9
7 TSLA US 0~ 209. -2 -0.95 74870 143.56 2103 0 N.A. N.A. 1.79e9
8 TSLA US 1~ 2.22 -0.43 -16.23 71601 15.07 10345 17.3999~ 41.3~ 5.93 1.71e9
9 TSLA US 0~ 176. -1.5 -0.84 69740 166.28 2090 0 N.A. N.A. 1.67e9
10 AMC US 12~ 0.02 -0.03 -60 68632 1371.53 69467 0.97 168.~ 2.76 4.66e7
> column_1[1]
# A tibble: 10 x 1
Name
<chr>
1 TSLA US 12/08/23 C245 Equity
2 TSLA US 12/08/23 C250 Equity
3 TSLA US 12/08/23 P240 Equity
4 TSLA US 12/08/23 C247.5 Equity
5 TSLA US 12/08/23 P242.5 Equity
6 AAPL US 12/08/23 C195 Equity
7 TSLA US 01/19/24 P450 Equity
8 TSLA US 12/08/23 C242.5 Equity
9 TSLA US 01/19/24 P416.67 Equity
10 AMC US 12/08/23 C9 Equity
不完全确定将数据转换为数据帧格式是否有帮助,但以防万一。
> df1<-as.data.frame(column_1[1])
> df1
Name
1 TSLA US 12/08/23 C245 Equity
2 TSLA US 12/08/23 C250 Equity
3 TSLA US 12/08/23 P240 Equity
4 TSLA US 12/08/23 C247.5 Equity
5 TSLA US 12/08/23 P242.5 Equity
6 AAPL US 12/08/23 C195 Equity
7 TSLA US 01/19/24 P450 Equity
8 TSLA US 12/08/23 C242.5 Equity
9 TSLA US 01/19/24 P416.67 Equity
10 AMC US 12/08/23 C9 Equity
通过使用
strsplit
,如何获得如下所示的所需输出?
A 列[名称] 基本上包含股票代码、到期日、执行价格和期权类型(看涨/看跌),我想按部分拆分 A 列并添加到新列,如图所示。
非常感谢您的帮助。
我认为
strsplit
是错误的工具。试试tidyr::separate
。
tidyr::separate(df1, Name, c('symbol', 'country', 'date', 'code', 'type'), ' ')
#> symbol country date code type
#> 1 TSLA US 12/08/23 C245 Equity
#> 2 TSLA US 12/08/23 C250 Equity
#> 3 TSLA US 12/08/23 P240 Equity
#> 4 TSLA US 12/08/23 C247.5 Equity
#> 5 TSLA US 12/08/23 P242.5 Equity
#> 6 AAPL US 12/08/23 C195 Equity
#> 7 TSLA US 01/19/24 P450 Equity
#> 8 TSLA US 12/08/23 C242.5 Equity
#> 9 TSLA US 01/19/24 P416.67 Equity
#> 10 AMC US 12/08/23 C9 Equity
从问题中获取的可重复数据
df1 <- structure(list(Name = c(
"TSLA US 12/08/23 C245 Equity",
"TSLA US 12/08/23 C250 Equity",
"TSLA US 12/08/23 P240 Equity",
"TSLA US 12/08/23 C247.5 Equity",
"TSLA US 12/08/23 P242.5 Equity",
"AAPL US 12/08/23 C195 Equity",
"TSLA US 01/19/24 P450 Equity",
"TSLA US 12/08/23 C242.5 Equity",
"TSLA US 01/19/24 P416.67 Equity",
"AMC US 12/08/23 C9 Equity"
)), class = "data.frame", row.names = c(NA, -10L))
您可以结合使用
separate_wider_delim
和其他一些 dplyr
选项来获得您确切想要的输出:
df %>% separate_wider_delim(Name,
delim = " ",
names = c("stock", "country", "expiry", "strike_price", "equity"),
cols_remove = FALSE) %>%
mutate(option_type = gsub("\\d+|\\.", "", strike_price)) %>%
select(-c(country, equity))
输出:
# Name stock expiry strike_price option_type
# 1 TSLA US 12/08/23 C245 Equity TSLA 12/08/23 C245 C
# 2 TSLA US 12/08/23 C250 Equity TSLA 12/08/23 C250 C
# 3 TSLA US 12/08/23 P240 Equity TSLA 12/08/23 P240 P
# 4 TSLA US 12/08/23 C247.5 Equity TSLA 12/08/23 C247.5 C
# 5 TSLA US 12/08/23 P242.5 Equity TSLA 12/08/23 P242.5 P
# 6 AAPL US 12/08/23 C195 Equity AAPL 12/08/23 C195 C
# 7 TSLA US 01/19/24 P450 Equity TSLA 01/19/24 P450 P
# 8 TSLA US 12/08/23 C242.5 Equity TSLA 12/08/23 C242.5 C
# 9 TSLA US 01/19/24 P416.67 Equity TSLA 01/19/24 P416.67 P
# 10 AMC US 12/08/23 C9 Equity AMC 12/08/23 C9 C