小编Tho*_*ing的帖子

在 R/list 中如何合并/rbind 子数据帧

有列表ori_list,如何组合子数据框cat_a|cat_btocatitem_a|item_bto item?(结果与 new_list 相同)

cat_a <- data.frame(name=c('A','B','C'),amount=c(1,2,3))
cat_b <- data.frame(name=c('w','B','C'),amount=c(4,2,3))
item_a <- data.frame(name=c('z','o','C'),amount=c(3,4,1))
item_b <- data.frame(name=c('n','B','C'),amount=c(6,6,3))

files <- ls(pattern = 'cat|item') %>% purrr::set_names()

ori_list <- list(mget(files))

new_list <- list(cat= data.frame(name = c('A','B','C','w','B','C'),
                            amount = c(1,2,3,4,2,3)),
                 item = data.frame(name=c('z','o','C','n','B','C'),
                                   amount=c(3,4,1,6,6,3)))
Run Code Online (Sandbox Code Playgroud)

r list dataframe

2
推荐指数
1
解决办法
59
查看次数

我们可以使用“gsub”以正则表达式的方式捕获子字符串(由连续重复的字符分组)并将其替换为相反的子字符串吗?

我正在尝试探索正则表达式捕获由连续重复的字符分组的子字符串并将其替换为相反的子字符串的能力,但使用gsub.

例如,给定一个字符串s <- "abxxxyyyyzzpqr""xxxyyyyzz"应捕获 where 并依次替换为"zzyyyyxxx"。我想我们可能需要两个步骤:

  1. “捕获”:如何设计捕获的模式"xxxyyyyzz""x""y""z"不断重复)?
  2. “reverse”:如何进行xxxyyyyzz反转以便我们最终获得一个新字符串"abzzyyyyxxxpqr"

由于我对正则表达式的了解有限,我不确定是否可以独自gsub完成这项任务。如果可能的话,我们将不胜感激地了解如何实施它。


更多示例

我正在寻找通用的正则表达式,而不是特定的字符:

  • "xxabcyyyzzpqr"-> "xxabczzyyypqr""yyyzz"目标应该在哪里
  • "xaaab,,,@@@&&"-> "xaaab&&@@@,,,"",,,@@@&&"目标应该在哪里
  • "xxaaab,,,@@@&&"-> "aaaxxb&&@@@,,,",其中"xxaaa"和 都",,,@@@&&"应该是目标

regex string replace r gsub

2
推荐指数
2
解决办法
242
查看次数

如何检索某个单词出现的所有文本

我有一个由出现在不同文本中的单词组成的数据框。

     word text
1     a    1
2     a    2
3     a    5
4     b    1
5     b    3
6     c    1
7     c    3
8     c    4
9     d    4
10    e    2
11    e    4
12    f    3
13    g    2
14    h    5
15    i    5
Run Code Online (Sandbox Code Playgroud)

我希望每个单词都有一个输出,如下所示:

a
[1] 1 2 5
b
[1] 1 3 
...
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以同时检索每个单词的所有文本,而不必每次我想查找特定单词的文本时都键入“a”或“b”?非常感谢!

split r list

2
推荐指数
1
解决办法
129
查看次数

删除列表中奇数长度的元素

我有一个列表,我想删除具有奇数长度的元素:

my_list <- list()
my_list$a <- c(1,2,3,4) #length 4
my_list$b <- c(1,2,3) # length 3
my_list$c <- c(5,6,7,8,6,7) #length 6
Run Code Online (Sandbox Code Playgroud)

所以在上面的例子中,我想删除, my_list$b 因为它的长度是3,而3是奇数。

有什么建议么?

filtering r list

2
推荐指数
2
解决办法
97
查看次数

是否有一个 R 函数可以输出在输入的字符向量中找到的相应正则表达式模式?

对于 R,假设我有以下字符向量:

input_vector <- c("123abc", "456efg", "hij789", "lmn000")
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一个现有的函数,例如myfunc(),可以输出我的向量后面的正则表达式模式。换句话说:

myfunc(input_vector)

> [1] "[:digit:]{3}[:alpha:]{3}" "[:digit:]{3}[:alpha:]{3}" "[:alpha:]{3}[:digit:]{3}" 
  [4] "[:alpha:]{3}[:digit:]{3}"
Run Code Online (Sandbox Code Playgroud)

[编辑]:在@Allan Cameron的第一个回复之后,我补充说,我的最终目标是检测[:digit:]-[:alpha:]在任意长的字符向量中发现的所有可能的模式,我知道它的元素理论上仅嵌入[:digit:][:alpha:]仅包含字符(这是一个简化,但这是一个解决方案)问题已经足够了)。说:

input_vector2 <- 1000L
input_vector2 <- c("123abc", "456efg", ..., "zz6ab8") # this line is illustrative, just imagine a 1000L character vector 
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我真正想要的是一个返回以下元素的 [:digit:]-[:alpha:] 结构的函数input_vector2

myfunc(input_vector2)

> [1] "[:digit:]{3}[:alpha:]{3}" # (or any way to tell there is three consecutive [:digit:] then three consecutive [:alpha:])
  [2] "[:digit:]{3}[:alpha:]{3}"
  ...
  [1000] "[:alpha:]{2}[:digit:][:alpha:]{2}[:digit:]"
Run Code Online (Sandbox Code Playgroud)

在所有情况下都表示感谢!
丹尼尔

我尝试搜索现有的堆栈溢出相关主题,但找不到解决方案,也找不到解决方案的提示。 …

regex string r

2
推荐指数
1
解决办法
115
查看次数

将“table”转换为“matrix”的任何直接方法?

tb例如,我有一张桌子

tb <- table(mtcars[c("carb","cyl")])
> tb
    cyl
carb 4 6 8
   1 5 2 0
   2 6 0 4
   3 0 0 3
   4 0 4 6
   6 0 1 0
   8 0 0 1
Run Code Online (Sandbox Code Playgroud)

在哪里

> class(tb)
[1] "table"
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种更直接的方法可以tb从 a转换tablematrix,即,

mtb <- as.matrix(as.data.frame.matrix(tb))
Run Code Online (Sandbox Code Playgroud)

以至于

> mtb
  4 6 8
1 5 2 0
2 6 0 4
3 0 0 3
4 0 4 6
6 0 1 0
8 0 …
Run Code Online (Sandbox Code Playgroud)

r matrix data-conversion

1
推荐指数
1
解决办法
42
查看次数

在 R 中的多行上过滤一个组

我有一个像这样的数据框,带有 ID 和两个条件:

df <- data.frame(ID=c("A", "A", "A", "B", "C"), cond1=c("yes", "yes", "no", "no", "yes"), cond2=c("no", "no", "yes", "yes", "yes"))
df
   ID cond1 cond2
1  A   yes    no
2  A   yes    no
3  A    no   yes
4  B    no   yes
5  C   yes   yes
Run Code Online (Sandbox Code Playgroud)

我想过滤适用 cond1 和 cond2 的 ID(=是),但它不必在同一行中为真。这意味着我想过滤掉 ID A 和 C,而不是 B。

我尝试使用 dplyr 对 group_by() 和 filter() 进行分组:

df %>%
group_by(PID)%>%
filter(cond1==yes&cond2==yes)
Run Code Online (Sandbox Code Playgroud)

但这只会过滤出一个 PID/行,其中 cond 1 和 cond 2 都适用(所以只有 ID C/行 5)。

我可以做些什么来按组过滤 PID/行,其中有两个条件,在一组中 t0 …

if-statement group-by r filter dplyr

1
推荐指数
1
解决办法
45
查看次数

R data.table 使用 tstrsplit 分解列

我以以下data.table为例

df = data.table(id = c(1, 2, 3), val=c("['hello', 'world']", "['hi']", "['so', 'there']"))
Run Code Online (Sandbox Code Playgroud)

我想将像对象一样的列表拆分为id重复的单独行。所以data.table我想要的预期如下

df2 = data.table(id = c(1, 1, 2, 3, 3), val=c("hello", "world", "hi", "so", "there"))
Run Code Online (Sandbox Code Playgroud)

我尝试了以下

df[, c("test") := tstrsplit(val, ",", fixed=TRUE)]
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误

误差在[.data.table(DF,:=(C( “测试”),tstrsplit(VAL, “”,固定= TRUE))):提供的2项被分配给3个项目栏'测试'的。如果您希望“回收” RHS,请使用 rep() 向您的代码读者明确说明这一意图。

有人可以指出我在这里做错了什么吗?提前致谢。

r strsplit data.table

1
推荐指数
1
解决办法
72
查看次数

在圆上创建随机点

在 R 中带有噪声的特定半径圆上创建随机点的最简单方法是什么?有图书馆做这种事情吗?

在此输入图像描述

random plot r

1
推荐指数
1
解决办法
1054
查看次数

创建二变量函数的图像并在 R 中找到其最优值

我正在为我的学位做一些任务,并陷入了对多变量函数进行成像的问题。下列的:

fb<-function(x) {5*x[1]^2+2*x[1]*x[2]+4*x[2]^2+4*x[1]-2*x[2]-2}
> x<--50:50
> y<--50:50
> z<-outer(x,y,fb)
Error in FUN(X, Y, ...) : unused argument (Y)
Run Code Online (Sandbox Code Playgroud)

更重要的是,我需要找到一个具有最大点的最佳值,但是当我尝试不使用向量时,它会给出下一个:

 optim(c(0,0), fb, control=list(fnscale=-5))
Error in fn(par, ...) : argument "y" is missing, with no default
Run Code Online (Sandbox Code Playgroud)

请指教。

optimization r graph function

1
推荐指数
1
解决办法
60
查看次数