我确实有像这样的数据框
columna <- c(1,2,3)
columnb <- c("a b e", "c d", "a c d")
columnc <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))
alldata <- data.frame(columna,columnb,columnc)
tokeep <- c("c", "e")
我希望修改alldata
并columnb
修改columnb
只保留tokeep
alldata$columnb
中找到的字符串。
理想情况下,我希望[ "e", "c", "c" ]
成为
filter(alldata, alldata$columnb %in% tokeep)
alldata[which(alldata$b %in% tokeep), ]
我首先想到我可以使用像
这样的东西<DataGrid EnableRowVirtualization="True" Grid.Row="3" Grid.ColumnSpan="2" AutoGenerateColumns="False" Name="DataGrid1" IsReadOnly="False" ItemsSource="{Binding Products}" Margin="10,10,10,10" PreviewKeyDown="DataGrid1_PreviewKeyDown" SelectionChanged="DataGrid1_SelectionChanged" CellEditEnding="DataGrid1_CellEditEnding" CanUserAddRows="True" CanUserDeleteRows="True" BeginningEdit="DataGrid1_BeginningEdit" >
<DataGrid.Columns>
<DataGridTextColumn Header="Item Name" IsReadOnly="True" Binding="{Binding Path=ItemName}" Width="*"></DataGridTextColumn>
<DataGridTextColumn Header="Item Price" IsReadOnly="True" Binding="{Binding Path=ItemPrice}" Width="*"></DataGridTextColumn>
<DataGridTextColumn x:Name="QuantityColumn" Header="Quantity" IsReadOnly="False" Binding="{Binding Path=Quantity, Mode=TwoWay}" Width="*"></DataGridTextColumn>
<DataGridTextColumn Header="Total Price" IsReadOnly="True" Binding="{Binding Path=TotalPrice}" Width="*">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
但我无法找到解决方案。
有人可以指导我吗?
答案 0 :(得分:1)
我们可以尝试使用gsub
用空字符串替换我们不想要的字符
alldata$columnb<- gsub(paste0("[^",paste0(tokeep,collapse = "|"),"]"),"", alldata$columnb)
alldata
# columna columnb columnc
#1 1 e 2010-11-01
#2 2 c 2008-03-25
#3 3 c 2007-03-14
我们正在创建的正则表达式是
paste0("[^",paste0(tokeep, collapse = "|"), "]")
#[1] "[^c|e]"
表示除c
或e
以外的任何内容。
修改强>
根据Wiktor的评论,我们可能需要正则表达式
paste0("[^",paste0(tokeep,collapse = ""),"]")
#[1] "[^ce]"
答案 1 :(得分:1)
另一个选项是str_extract
library(stringr)
alldata$columnb <- str_extract(alldata$columnb, paste(tokeep, collapse="|"))
alldata$columnb
[#1] "e" "c" "c"