【问题标题】:Filter by character, creating column with results按字符过滤,创建包含结果的列
【发布时间】:2019-05-17 09:26:21
【问题描述】:

我正在尝试创建一个图表,显示两个数据集,如果是那个字符或者不是那个字符。

目前我正在使用类似的东西:

setosa <-  iris%>%
  filter_all(any_vars(str_detect(., pattern = "setosa")))

使用 iris 示例,我希望能够在字符串中搜索出一个字符,例如:setosa,然后绘制一个显示setosanot setosa 的图形。

请看下面我的数据框示例,pd.Sails 列充满了同一字符的不同内涵。我希望能够绘制 pd$TWA v pd.TWS 的图表,并且数据显示基于名称的 pd$Sails 列的结果,因此 J2 Nnot J2 N

抱歉,我正在努力传达问题!

我现在的df是:


 pd.Boat   pd.Sails pd.TWA pd.TWS
1  Sojana RMAIN/J2 N   40.9   13.7
2  Sojana RMAIN/J2 N   38.8   13.0
3  Sojana RMAIN/J2 N   37.8   13.3
4  Sojana RMAIN/J2 N   37.3   13.3
5  Sojana RMAIN/J2 N   45.2   13.2
6  Sojana RMAIN/J2 N   50.6   13.2

dput(head)

structure(list(pd.Boat = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "Sojana", class = "factor"), 
    pd.Sails = structure(c(36L, 36L, 36L, 36L, 36L, 36L), .Label = c("RMAIN", 
    "RMAIN/A2", "RMAIN/A2 C - north 19", "RMAIN/A2 C - north 19/Big Jonny", 
    "RMAIN/A2 C - north 19/CMiz SS", "RMAIN/A2 C - north 19/Spi SS v2/Big Jonny", 
    "RMAIN/A2 Doyle", "RMAIN/A2 Doyle/Big Jonny", "RMAIN/A2 Doyle/Spi SS v2", 
    "RMAIN/A2 Doyle/Spi SS v2/Big Jonny", "RMAIN/A2 N", "RMAIN/A2 N/Big Jonny", 
    "RMAIN/A2 N/Mizzen SS V2", "RMAIN/A2 N/Spi SS v2/Big Jonny", 
    "RMAIN/A2/Big Jonny", "RMAIN/A2/Big Jonny/Spi SS v2", "RMAIN/A2/Mizzen SS V2", 
    "RMAIN/A2/Spi SS v2", "RMAIN/A2/Spi SS v2/Big Jonny", "RMAIN/A2/Spi SS v2/Mizzen SS V2", 
    "RMAIN/A2N", "RMAIN/A2N/Big Jonny", "RMAIN/A2N/Mizzen SS V2", 
    "RMAIN/A2N/Spi SS v2/Big Jonny", "RMAIN/A4", "RMAIN/A4/Big Jonny", 
    "RMAIN/A4/Big Jonny/Mizzen SS V2", "RMAIN/A4/CMiz SS", "RMAIN/A4/J2 N/Big Jonny", 
    "RMAIN/A4/Mizzen SS V2", "RMAIN/A4/Spi SS v2/Big Jonny", 
    "RMAIN/J1 N", "RMAIN/J1 N/Black Betty v2", "RMAIN/J1 N/CMiz SS", 
    "RMAIN/J1 N/Mizzen SS V2", "RMAIN/J2 N", "RMAIN/J2 N/Black Betty v2", 
    "RMAIN/J2 N/CMiz SS", "RMAIN/J2 N/Mizzen SS V2"), class = "factor"), 
    pd.TWA = c(40.9, 38.8, 37.8, 37.3, 45.2, 50.6), pd.TWS = c(13.7, 
    13, 13.3, 13.3, 13.2, 13.2)), row.names = c(NA, 6L), class = "data.frame")

【问题讨论】:

  • 你期望的输出是什么?
  • 我的猜测是预期结果将是一个新列,其中包含“setosa”和“notsetosa”列。
  • 我认为您不知道哪个变量将保存您要查找的数据?它会存在多个变量中吗?
  • @James 是的,这是角色复杂的问题,我只想按某些元素过滤。

标签: r string dplyr


【解决方案1】:

您可以使用ifelse 来执行此操作。

iris$sns <- ifelse(iris$Species == "setosa", "setosa", "notsetosa")

set.seed(357)
iris <- iris[sample(1:nrow(iris)),]

> head(iris[sample(1:nrow(iris)),])
   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species       sns
17          5.4         3.9          1.3         0.4     setosa    setosa
9           4.4         2.9          1.4         0.2     setosa    setosa
42          4.5         2.3          1.3         0.3     setosa    setosa
34          5.5         4.2          1.4         0.2     setosa    setosa
96          5.7         3.0          4.2         1.2 versicolor notsetosa
68          5.8         2.7          4.1         1.0 versicolor notsetosa

【讨论】:

  • 谢谢@Roman,如果我的角色名称类似于“set/tos/a”并且我想对“tos”或“not tos”做同样的事情。 ?所以搜索一个字符的特定元素。
  • ifelse(iris$Species == "tos", "tos", "not tos")。请参阅?ifelse 了解更多信息。
猜你喜欢
  • 1970-01-01
  • 2022-07-20
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
相关资源
最近更新 更多