Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中创建一列新的连续标记(如n-gram)_R_N Gram - Fatal编程技术网

在R中创建一列新的连续标记(如n-gram)

在R中创建一列新的连续标记(如n-gram),r,n-gram,R,N Gram,我有这个数据集 A B URBAN 1 PLAN 2 我希望像这样增加新的专栏 A A` B URBAN URB 1 URBAN RBA 1 URBAN BAN 1 PLAN PLA 2 PLAN LAN 2 如何在R中创建A'列?这里有一种可能的方法。我相信有更简洁的方法来处理这项工作。但我认为以下几点就可以了。对于mydf中的每一行,我应用substr()来创建三

我有这个数据集

A        B
URBAN    1
PLAN     2
我希望像这样增加新的专栏

A        A`      B
URBAN    URB     1
URBAN    RBA     1
URBAN    BAN     1
PLAN     PLA     2
PLAN     LAN     2

如何在R中创建A'列?

这里有一种可能的方法。我相信有更简洁的方法来处理这项工作。但我认为以下几点就可以了。对于
mydf
中的每一行,我应用
substr()
来创建三个字母元素。
Map()
部件正在生成元素。由于存在一些不需要的元素,我进一步使用另一个
lappy()
将它们子集化。最后,
unnest()

library(tidyverse)

mydf %>%
mutate(whatever = lapply(1:nrow(mydf), function(x) {
                     unlist(Map(function(j, k) substr(mydf$A[x], start = j, stop = k),
                             1:nchar(mydf$A[x]), 3:nchar(mydf$A[x])))
                     }) %>%
                  lapply(function(x) x[nchar(x) ==3])) %>%
unnest(whatever)

      A B whatever
1 URBAN 1      URB
2 URBAN 1      RBA
3 URBAN 1      BAN
4  PLAN 2      PLA
5  PLAN 2      LAN
数据

mydf <- structure(list(A = c("URBAN", "PLAN"), B = 1:2), .Names = c("A", 
"B"), class = "data.frame", row.names = c(NA, -2L))

mydf这里有一种可能的方法。我相信有更简洁的方法来处理这项工作。但我认为以下几点就可以了。对于
mydf
中的每一行,我应用
substr()
来创建三个字母元素。
Map()
部件正在生成元素。由于存在一些不需要的元素,我进一步使用另一个
lappy()
将它们子集化。最后,
unnest()

library(tidyverse)

mydf %>%
mutate(whatever = lapply(1:nrow(mydf), function(x) {
                     unlist(Map(function(j, k) substr(mydf$A[x], start = j, stop = k),
                             1:nchar(mydf$A[x]), 3:nchar(mydf$A[x])))
                     }) %>%
                  lapply(function(x) x[nchar(x) ==3])) %>%
unnest(whatever)

      A B whatever
1 URBAN 1      URB
2 URBAN 1      RBA
3 URBAN 1      BAN
4  PLAN 2      PLA
5  PLAN 2      LAN
数据

mydf <- structure(list(A = c("URBAN", "PLAN"), B = 1:2), .Names = c("A", 
"B"), class = "data.frame", row.names = c(NA, -2L))

mydf这里有一个与
stru匹配的选项

library(stringr)
merge(stack(lapply(setNames(str_match_all(mydf$A, "(?=(...))"),
            mydf$A), `[`, , 2))[2:1], mydf, by.x = 'ind', by.y = 'A')

或者使用与
tidyverse

library(purrr)
library(dplyr)
mydf %>%
    mutate(Anew = str_match_all(A, "(?=(...))") %>% 
                map(~.x[,2])) %>%
    unnest   
#      A B Anew
#1 URBAN 1  URB
#2 URBAN 1  RBA
#3 URBAN 1  BAN
#4  PLAN 2  PLA
#5  PLAN 2  LAN

这里有一个带有
str\u match

library(stringr)
merge(stack(lapply(setNames(str_match_all(mydf$A, "(?=(...))"),
            mydf$A), `[`, , 2))[2:1], mydf, by.x = 'ind', by.y = 'A')

或者使用与
tidyverse

library(purrr)
library(dplyr)
mydf %>%
    mutate(Anew = str_match_all(A, "(?=(...))") %>% 
                map(~.x[,2])) %>%
    unnest   
#      A B Anew
#1 URBAN 1  URB
#2 URBAN 1  RBA
#3 URBAN 1  BAN
#4  PLAN 2  PLA
#5  PLAN 2  LAN

结合你的想法和我的想法,一种方法如下<代码>数据%>%突变(无论什么=lappy(A,函数(y)rollappy(1:nchar(y),宽度=3,函数(x)substr(y,min(x),max(x‘‘‘)’)%>%unest(无论什么)
。这让我们少打字。结合你的想法和我的想法,一种方法是如下<代码>数据%>%突变(无论什么=lappy(A,函数(y)rollappy(1:nchar(y),宽度=3,函数(x)substr(y,min(x),max(x‘‘‘)’)%>%unest(无论什么)
。这样我们就可以少打字了。如果我们使用
map()
map()
unest()
是这种操作的好朋友。我正在读你的代码。你能解释一下正则表达式吗?在这方面我还有很多东西要学。正则表达式是一个积极的展望。就其本身而言,它是不可捕获的,但是可以通过用括号(
(…)
)@akrun来捕获它。谢谢您提供的信息。我喜欢使用
str\u match\u all()
的想法。这使得这项工作非常容易。这取决于顺序。如果第一个参数是data,第二个参数是names,则为yes。根据
?walk
walk()返回input.x(不可见)。这使得它易于在管道中使用。
@akrun非常感谢您。我将玩
walk()
。最后几天不知何故是学习
Map()
Map()
的时候。现在我已经习惯了这些函数。如果我们使用
map()
map()
unest()
是这种操作的好朋友。我正在读你的代码。你能解释一下正则表达式吗?在这方面我还有很多东西要学。正则表达式是一个积极的展望。就其本身而言,它是不可捕获的,但是可以通过用括号(
(…)
)@akrun来捕获它。谢谢您提供的信息。我喜欢使用
str\u match\u all()
的想法。这使得这项工作非常容易。这取决于顺序。如果第一个参数是data,第二个参数是names,则为yes。根据
?walk
walk()返回input.x(不可见)。这使得它易于在管道中使用。
@akrun非常感谢您。我将玩
walk()
。最后几天不知何故是学习
Map()
Map()
的时候。现在我已经习惯了这些功能。