Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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 将字符串的出现分组到一行_R_Plyr - Fatal编程技术网

R 将字符串的出现分组到一行

R 将字符串的出现分组到一行,r,plyr,R,Plyr,tl;dr 有没有一种方法可以将大量值分组到一个列中,而不截断这些值 我正在研究RStudio上有48178个条目的数据帧。数据框有两列,第一列包含唯一的数值,另一列包含重复的字符串 ---------- id name 1 forest 2 forest 3 park 4 riverbank . . . . . 48178 water ---------- 我想根据第二栏中唯一的条目将所有条目分组。我使用了包“ddply”来实现这个结果。我现在有以

tl;dr 有没有一种方法可以将大量值分组到一个列中,而不截断这些值


我正在研究RStudio上有48178个条目的数据帧。数据框有两列,第一列包含唯一的数值,另一列包含重复的字符串

----------
id    name
1     forest
2     forest
3     park
4     riverbank
.
.
.
.
.
48178   water
----------
我想根据第二栏中唯一的条目将所有条目分组。我使用了包“ddply”来实现这个结果。我现在有以下派生表:

----------
type         V1
forest       forest,forest,forest
park         park,park,park,park
riverbank    riverbank,riverbank,
water        water,water,water,water
----------
但是,在对派生数据帧应用
str
函数时,我发现该列包含截断值,而不是每个字符串的每个实例

str
的输出为:

'data.frame':   4 obs. of  2 variables:
 $ type: chr  "forest" "park" "riverbank" "water"
 $ V1  : chr  "forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,f"| __truncated__ "park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,pa"| __truncated__ "riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverba"| __truncated__ "water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,w"| __truncated__`

如何将相同的字符串组合在一起并将它们推到一行,而不进行截断?

如果您只需要发生次数,那么为什么不简单地使用

df<- read.table(head=T, text="id    name
1     forest
2     forest
3     park
4     riverbank")
df
df1<- as.data.frame(table(df$name))
#will give you number of times the word occurs

# if for some reason you want a repetition,then 
x<- mapply(rep,df1$Var1,df1$Freq)
y<- sapply(x,paste,  collapse=",")
data.frame(type=df1$Var1, V1=y)

df如果您想要的只是发生次数,那么为什么不简单地使用

df<- read.table(head=T, text="id    name
1     forest
2     forest
3     park
4     riverbank")
df
df1<- as.data.frame(table(df$name))
#will give you number of times the word occurs

# if for some reason you want a repetition,then 
x<- mapply(rep,df1$Var1,df1$Freq)
y<- sapply(x,paste,  collapse=",")
data.frame(type=df1$Var1, V1=y)

df尝试使用base R split()函数将结果存储在列表中:

new.list <- split(df, f=df$type)

new.list尝试使用base R split()函数将结果存储在列表中:

new.list <- split(df, f=df$type)

new.list您的字符串并没有真正被截断,只有
str
显示的字符串被截断:

size <- 48000
df <- data.frame(1:size, 
                 type=sample(c("forest", "park", "riverbank", "water" ), 
                             size, replace = TRUE), 
                 stringsAsFactors = FALSE)

res <- by(df$type , df$type, paste, collapse=",")


str(res)
 'by' chr [1:4(1d)] "forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,f"| __truncated__ ...
 - attr(*, "dimnames")=List of 1
  ..$ df$type: chr [1:4] "forest" "park" "riverbank" "water"
 - attr(*, "call")= language by.default(data = df$type, INDICES = df$type, FUN = paste, collapse = ",")


lengths( strsplit(res, ','))
   forest      park riverbank     water 
    11993     12017     11953     12037 

sum(lengths( strsplit(res, ',')))
[1] 48000

size您的字符串并没有真正被截断,只有
str
显示的字符串被截断:

size <- 48000
df <- data.frame(1:size, 
                 type=sample(c("forest", "park", "riverbank", "water" ), 
                             size, replace = TRUE), 
                 stringsAsFactors = FALSE)

res <- by(df$type , df$type, paste, collapse=",")


str(res)
 'by' chr [1:4(1d)] "forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,f"| __truncated__ ...
 - attr(*, "dimnames")=List of 1
  ..$ df$type: chr [1:4] "forest" "park" "riverbank" "water"
 - attr(*, "call")= language by.default(data = df$type, INDICES = df$type, FUN = paste, collapse = ",")


lengths( strsplit(res, ','))
   forest      park riverbank     water 
    11993     12017     11953     12037 

sum(lengths( strsplit(res, ',')))
[1] 48000
size扩展HubertL的答案,
str()
函数完全按照它应该做的去做,但是对于您想要做的事情来说,它可能是一个错误的选择

从您在Q中提供的(相当有限的)信息来看,您似乎已经实现了所需的功能,即连接相同类型的所有字符串

但是,您似乎被
str()
函数的输出卡住了。

请参阅帮助页面
?str

从“说明”部分:

简洁地显示R对象的内部结构、诊断功能和
摘要
(在某种程度上,
dput
)的替代方案。理想情况下,每个“基本”结构只显示一行。它特别适合紧凑地显示(可能是嵌套的)列表的(缩写)内容。其思想是为任何R对象提供合理的输出

str()
有一个默认为128的参数
nchar.max

nchar.max
字符
字符串显示的最大字符数。较长的字符串被截断,请参见下面的
longch
示例

示例部分中的
longch
示例说明了此参数的效果:

nchar(longch <- paste(rep(letters,100), collapse = ""))
#[1] 2600
str(longch)
# chr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw"| __truncated__
str(longch, nchar.max = 52)
# chr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxy"| __truncated__
nchar(longch扩展HubertL的答案,
str()

从您在Q中提供的(相当有限的)信息来看,您似乎已经实现了所需的功能,即连接相同类型的所有字符串

但是,您似乎被
str()
函数的输出卡住了。

请参阅帮助页面
?str

从“说明”部分:

紧凑地显示R对象的内部结构、诊断功能和
摘要
(在某种程度上还有
dput
)的替代方案。理想情况下,每个“基本”结构只显示一行。它特别适合紧凑地显示(可能嵌套)的(缩写)内容目的是为任何R对象提供合理的输出

str()
有一个默认为128的参数
nchar.max

nchar.max
字符
字符串显示的最大字符数。较长的字符串将被截断,请参见下面的
longch
示例

示例部分中的
longch
示例说明了此参数的效果:

nchar(longch <- paste(rep(letters,100), collapse = ""))
#[1] 2600
str(longch)
# chr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw"| __truncated__
str(longch, nchar.max = 52)
# chr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxy"| __truncated__

nchar(longch试试这个:
sapply(strsplit(as.character(df$name)),split=',,length)
应该可以!问题是我们试图从中获取计数的列中存在截断值。我希望将该字符的所有实例分组在一起,我想由于空间限制,数据框会截断这些实例。让我们来看看。请在您的问题中编辑任何其他信息(而不是评论)。另外,请让您的示例重现。帮助他人帮助您。请尝试以下操作:
sapply(strsplit(as.character(df$name),split=','),length)
应该可以!问题是我们试图从中获取计数的列中存在截断值。我希望将该字符的所有实例分组在一起,我想由于空间限制,数据框会截断这些实例。让我们来看看。请在您的问题中编辑任何其他信息(而不是评论).另外,请让你所有的例子都可以复制。帮助他人帮助你。