在此示例中,将letters
与 V1 V2
1 p_men_1 1
2 p_men_2 0
3 p_men_3 1
4 p_wom_1 1
5 p_wom_2 1
6 p_wom_3 0
分开的最有效方法是什么:
V1 V2 V3
1 p_men 1 1
2 p_men 2 0
3 p_men 3 1
4 p_wom 1 1
5 p_wom 2 1
6 p_wom 3 0
输出中
library(tidyr)
library(dplyr)
df %>% separate(V1, c('V1', 'V2'), sep = '_')
我试过
df = rbind(c('p_men_1', 1),
c('p_men_2', 0),
c('p_men_3', 1),
c('p_wom_1', 1),
c('p_wom_2', 1),
c('p_wom_3', 0))
df = as.data.frame(df)
但由于'_',它不起作用
df = pd.read_csv('TNIC.csv')
for k, g in df.groupby('gvkey_1'):
g.to_csv('Company_' + str(k) + '.csv', index=False)
答案 0 :(得分:6)
这可行:
df %>%
extract(V1, c('V1', 'V2'), regex = '(^.+)_(\\d+)')
# V1 V2 V2
# 1 p_men 1 1
# 2 p_men 2 0
# 3 p_men 3 1
# 4 p_wom 1 1
# 5 p_wom 2 1
# 6 p_wom 3 0
答案 1 :(得分:2)
我的策略是拆分最后一个下划线,可以通过形成一个模式来编码,该模式具有下划线,后跟零长度前瞻,需要所有非下划线,直到字符值结束。
cbind( do.call( rbind, strsplit(as.character(dat$V1), split= '_(?=[^_]+$)', perl=TRUE) ),
dat['V2'] )
1 2 V2
1 p_men 1 1
2 p_men 2 0
3 p_men 3 1
4 p_wom 1 1
5 p_wom 2 1
6 p_wom 3 0
不幸的是,这似乎是一个格式错误的数据框,因为尽管被识别为数据框并且要调用cbind.data.frame
,但它会使列名不正确地形成前导数字。