繁体   English   中英

R 更改 Dataframe 中的元素

R Changing Elements in a Dataframe

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

正如标题所说,我正在尝试将 dataframe 中的元素从一个字符更改为另一个字符。 dataframe如下:

g1=c("CC","DD","GG")
g2=c("AA","BB","EE")
g3=c("HH","II","JJ")

df=data.frame(g1,g2,g3)

我希望将元素从字母格式转换为字母/字母格式(例如 CC 到 C/C 或 AA 到 A/A)

我知道使用“strsplit”可以在列表中使用。 我也知道我需要以某种方式合并:collapse="/"

如何将 strsplit function 应用于整个 dataframe?

我在想一些事情:

split=function(x)
{
  unlist(paste(strsplit(x,""),collapse="/"))
}

j=as.data.frame(apply(df,1,split))

但它没有给出预期的结果。

更新----------------显然,以下脚本有效:

split=function(x)
{
  paste(unlist(strsplit(x,"")),collapse="/")
}

p=apply(df,c(1,2),split)

如果有更高效或方便的方法,欢迎分享。

4 个回复

我可以想到两种方法来解决这个问题。 一种是像你一样使用strsplit 您只错过了遍历从strsplit返回的列表中的每个元素的部分:

Split <- function(x) {
  #unlist(lapply(strsplit(x, ""), paste, collapse="/"))
  sapply(strsplit(x, ""), paste, collapse="/")
}
as.data.frame(lapply(df, Split))

另一种方法是使用gsub\\B符号,它匹配不在“单词”开头或结尾的空字符串。

as.data.frame(lapply(df, gsub, pattern="\\B", replacement="/"))

什么构成“单词”取决于语言环境和实现,所以这里有另一个使用gsub和反向引用的解决方案。

as.data.frame(lapply(df, gsub, pattern="(.)(.)", replacement="\\1/\\2"))

从这样的 function 定义开始

insertslash <- function(x) sapply(strsplit(x, ""), function(x) paste(x, collapse="/"))

通过insertslash(g1)说服自己它应该做的事情。

要将其应用于 dataframe 的所有列,请执行以下操作:

as.data.frame(apply(df, 2, insertslash))

显然,你可以把它变成一个讨厌的单行:

as.data.frame(apply(df, 2, function(x) sapply(strsplit(x, ""), function(x) paste(x, collapse="/"))))

这是使用gsub的一些技巧。 对正则表达式了解更多的人应该能够对此进行改进:

mySplit <- function(x)
{
  substr(gsub("","/",x),2,4)
}

as.data.frame(apply(df,2,mySplit))

您最初的解决方案不起作用的原因是您在错误的位置unlist 因此,如果您稍后lapply unlist事情会按您的预期工作:

mySplit1 <- function(x)
{
  unlist(lapply(strsplit(x,""),paste,collapse="/"))
}

as.data.frame(apply(df,2,mySplit1))

另一个使用 paste() 的 hack,绝对没有那么优雅,但它完成了工作。

for (col in 1:ncol(df)){
  df[,col] = paste(substr(df[,col],1,1),"/",substr(df[,col],1,1), sep="")
}
1 在R中更改数据框的尺寸

我有一个包含数十列和数千行的数据集。 在这里,我仅提供一个玩具示例: 我要做的第一件事是为每个trN样条内插varX列,作为列tt的函数。 这是很容易做到与操作ddply从plyr包。 但是,假设我还想更改新数据框的尺寸(行数)。 例如,我想拥有一组值,该值指定要在哪里进行 ...

3 根据 r 中同一行中其他元素的值更改数据框值

我想根据同一行中的其他元素是否为某个值来更改数据框行中元素的值。 我有以下形式的数据框: 当 Id = 1、number1 = 1 且 number2 = 10 时,我想将 1 写入结果列,否则为 0。 所以它应该是这样的: 我猜应该有一种方法可以用 lapply() 来解决这个问题。 对不起,如果 ...

4 R:如果值在 n 个元素后重复,则更改数据框中的行

我有一个非常大的数据框Data ,我需要在其中检查Energy是否在 n 步内重复。 你可以看到 n 步后能量再次为零,女巫是我需要改变的。 我在示例中将 n 设置为 10。 我需要这样做,因为这是一个错误。 下面是我想出的代码,但我的洞数据需要很长时间才能完成。 这是我的数据的摘录,因此您可以 ...

2020-02-11 12:31:32 2 67   r/ rows
5 在 R 中更改数据框中的列名

我让 R 读取我的 CSV 文件,但我在更改列名时遇到了问题。 我的输出是一个包含 5 列的数据框,其中包含单词“human”。 我还收到一条热烈的消息:“工作目录已在笔记本块中更改为/ Users / anhhoang / Downloads / RFile。工作块完成运行后将重置工作目录。在 ...

2020-10-21 09:27:03 0 28   r
6 R:选择并更改数据框中列中的值

我认为我需要编写某种if / else循环来完成此操作,但是我不确定从哪里开始。 我想在数据框的一列中搜索具有一定长度并包含特定符号的值。 例如,在LAYER列中,如果该值是两个符号长并​​且包含“ L”(可以是LF,FL,LH或HL),我想将其他列值乘以0.5。 我为此使用的句子格 ...

7 R,更改数据框中的列类型

我正在使用此代码从一个文件夹中读取多个Excel文件 我收到此错误 。 C14列是混合的,在某些文件中只是数字,而其他文件是文本, 有没有办法告诉R c14应该是文本。 谢谢。 ...

2016-12-23 22:45:41 1 1043   r/ excel
9 在R中循环更改数据框名称

我有一组名称为RI **的数据框,其中**表示不同的数字。 它们都包含不同时期的相同数据。 我想更改所有这些数据框的列名。 我写: 但这无济于事。 我收到消息“ names(i)&lt;-varNames中的错误:'names'属性[15]的长度必须与向量[1]的长度相同” ...

2014-03-13 21:38:48 1 70   r
10 在R中更改数据框对象结构

我在R中有一个dataframe对象,其示例如下: 从这个数据框中,我想创建一个20列的新数据框(以制作热图),如下所示: 对于$1每个唯一值,新数据框中仅一行。 因此,对于此样本数据,新数据帧应具有3行(唯一的4,12,13)。 $2表示新数据帧的列号,其中值(新列 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM