jjzjj

关于 r:text to column,不要重复列名

codeneng 2023-03-28 原文

text to column, do not repeat column name

本问题已经有最佳答案,请猛点这里访问。

我有一个如下所示的 df:

1
2
3
4
id  name                 grade
1   rich, tom, todd,     12
2   chris,mary           9
3   larry                10

我运行以下代码将文本拆分为列:

1
newdf <- within(df, name<-data.frame(do.call('rbind', strsplit(as.character(name), ',', fixed=TRUE))))

这是我的输出:

1
2
3
4
id  name.X1   name.X2   name.X3    grade
1   rich       tom       todd       12
2   chris      mary      chris      9
3   larry      larry     larry      10

我的代码是重复名称(在 id 2


我们可以使用 splitstackshape

中的 cSplit

1
2
3
4
5
6
library(splitstackshape)
cSplit(df,"name",",")
#   id grade name_1 name_2 name_3
#1:  1    12   rich    tom   todd
#2:  2     9  chris   mary     NA
#3:  3    10  larry     NA     NA

如果我们使用 strsplit,由于 list 元素的长度不等,最好用 NA 填充,否则元素会重复。对于最后用 NA 填充,一个选项是获取每个 list 元素的 length,这可以用 lengths 完成,取 max (\\'mx\\') 并分配 length 到 \\'mx\\'。然后,我们只需根据 \\'mx\\' 在 \\'df\\' 上创建新列。

1
2
3
4
5
6
7
8
lst <- strsplit(as.character(df$name),",\\\\s*")
mx <- max(lengths(lst))
df[paste0("name", seq(mx))] <- lapply(lst, `length<-`, mx)
df[setdiff(names(df),"name")]
#  id grade name1 name2 name3
#1  1    12  rich chris larry
#2  2     9   tom  mary  <NA>
#3  3    10  todd  <NA>  <NA>

  • @ZheyuanLi name_3: Factor w/ 1 level"todd": 1 NA NA
  • @ZheyuanLi 是的,因为前一种情况,列作为初始\\'name\\'列返回为factor,但在strsplit 中,它将是character 列。
  • @ZheyuanLi 我猜对于 factor,NA 可能是 NA_integer_
  • 完美运行,谢谢@akrun
  • 对于 csplit (cSplit(df, "name", ",") 你可以用一行代码拆分多列吗?我尝试了几种变体,但对 cSplit 没有任何效果。我尝试了这样的事情: cSplit(df , "name", "subject", ",") 但它不起作用。
  • @richiepop2 为此,您需要连接,即 cSplit(df, c("name","subject"),",")
  • 啊,明白了。谢谢!!!

有关关于 r:text to column,不要重复列名的更多相关文章

  1. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

  2. ruby - 正则表达式 - 保存重复捕获的组 - 2

    这就是我做的a="%span.rockets#diamonds.ribbons.forever"a=a.match(/(^\%\w+)([\.|\#]\w+)+/)putsa.inspect这是我得到的#这就是我想要的#帮助?我尝试过但失败了:( 最佳答案 通常,您不能获得任意数量的捕获组,但如果您使用扫描,您可以为您想要捕获的每个标记获得一个匹配:a="%span.rockets#diamonds.ribbons.forever"a=a.scan(/^%\w+|\G[.|#]\w+/)putsa.inspect["%span","

  3. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  4. Ruby 从数组中删除重复的对象 - 2

    我无法使用传统的Ruby方法从下面的数组user_list中删除所有重复对象,从而获得预期的结果。有解决这个问题的聪明方法吗?users=[]user_list.eachdo|u|user=User.find_by_id(u.user_id)users 最佳答案 这个怎么样?users=User.find(user_list.map(&:user_id).uniq)这具有作为一个数据库调用而不是user_list.size数据库调用的额外好处。 关于Ruby从数组中删除重复的对象,我们在

  5. ruby - 关于 Ruby 中 Dir[] 和 File.join() 的混淆 - 2

    我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案

  6. Ruby 删除可枚举列表中的重复项 - 2

    ruby中有没有一个很好的方法来删除可枚举列表中的重复项(即拒绝等) 最佳答案 对于数组你可以使用uniq()方法a=["a","a","b","b","c"]a.uniq#=>["a","b","c"]所以如果你只是(1..10).to_a.uniq或%w{antbatcatant}.to_a.uniq因为无论如何,几乎所有您实现的方法都将作为Array类返回。 关于Ruby删除可枚举列表中的重复项,我们在StackOverflow上找到一个类似的问题: h

  7. ruby - 重复排列 - 2

    我知道如何创建值数组的排列。例如:[*1..3].permutation(2)这导致以下六种排列:[1,2][1,3][2,1][2,3][3,1][3,2]但这个结果缺少三个排列,它们是相同值的组合,即:[1,1][2,2][3,3]如何获得所有排列,包括上面重复的排列? 最佳答案 尝试#repeated_permutation:[*1..3].repeated_permutation(3).to_a>pp[*1..3].repeated_permutation(3).to_a[[1,1,1],[1,1,2],[1,1,3],[1

  8. elasticsearch源码关于TransportSearchAction【阶段三】 - 2

    1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>

  9. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

  10. ruby - 在 Ruby 数组中收集重复项的最快/单行方法? - 2

    像这样转换数组的最快/单行方法是什么:[1,1,1,1,2,2,3,5,5,5,8,13,21,21,21]...进入像这样的对象数组:[{1=>4},{2=>2},{3=>1},{5=>3},{8=>1},{13=>1},{21=>3}] 最佳答案 要获得所需的格式,您可以附加一个调用以映射到您的解决方案:array.inject({}){|h,v|h[v]||=0;h[v]+=1;h}.map{|k,v|{k=>v}}虽然它仍然是单行的,但它开始变得凌乱了。 关于ruby-在Ruby

随机推荐