我有以下几行
library(dplyr)
library(tidyr)
df1 %>%
group_by(user_id) %>%
mutate(id = paste0("pred_", row_number()),
id = factor(id, levels = paste0("pred_", 1:4))) %>%
spread(id, pred, drop=FALSE, fill = "")
我想从第一列中删除-Dup并保留其余列,以便我有
ABC-Dup2 XUAS BSNMM
CVD nbvn nbmsb
SVDB-Dup4 NBV KJHA
TTS-Dup7 MNMN NBA
我正在尝试sed&#39s / -Dup。* // 1'但它也从该行中删除了其余的列。
答案 0 :(得分:3)
如果您将.*
更改为[^[:blank:]]*
,那么您将不再遇到此问题,但仍然存在从 中删除-Dup
的问题在线,而不仅仅是第一列。只需使用awk:
awk '{sub(/-Dup.*/,"",$1)}1' file
注意仅如何对第一列(字段)进行操作:
$ cat file
ABC-Dup2 XUAS BSNMM
CVD nbvn-Dup7 nbmsb
SVDB-Dup4 NBV KJHA
TTS-Dup7 MNMN NBA
$ awk '{sub(/-Dup.*/,"",$1)}1' file
ABC XUAS BSNMM
CVD nbvn-Dup7 nbmsb
SVDB NBV KJHA
TTS MNMN NBA
答案 1 :(得分:1)
sed
解决方案需要合并字段分隔符以将目标定义为仅第一列。 GNU sed
:
$ sed -r 's/^(\S*)-Dup\S*/\1/' file
ABC XUAS BSNMM
CVD nbvn nbmsb
SVDB NBV KJHA
TTS MNMN NBA
答案 2 :(得分:0)
如果模式是-Dup后跟一个数字,那么你可以尝试像
这样的东西 sed 's/-Dup[0-9]*//1'
答案 3 :(得分:0)
sed 's/\(^[^ ]*\)-Dup[0-9]*/\1/'