我有一个很大的文件,有很多栏。我想在1列中计算每个值出现的次数。因此,我使用cut -f 2 "file" | sort | uniq -c。我得到了我想要的结果。然而,当我将该文件读到R时,它显示我只有1列,但数据如下例所示:
cut -f 2 "file" | sort | uniq -c
123 Chelsea 65 Liverpool 77 Manchester city 2 Brentford
我想要的是两列,一列是计数,另一列是名字。然而,我只有一张。谁能帮我把这一列一分为二,或者用更好的方法从大文件中提取出来?提前感谢!
h79rfbju1#
这不是一个很好的解决方案,但试试这个。将上一条命令的输出通过管道传输到下面的While循环:
"your program" | while read count city do printf "%20s\t%s" $count $city done
ht4b089n2#
如果您想简单地计算每列中的唯一示例,那么最好的选择是使用带有自定义分隔符的cut命令。例如,它将是空格分隔符。在这种情况下,您必须考虑在第一个空格之后还有后续空格,例如Manchester city。因此,为了计算第一列的唯一出现次数:
cut
Manchester city
cut -d ' ' -f1 <your_file> | uniq | wc -l
其中,-d将分隔符设置为空白' ',-f1提供第一列;uniq保留唯一示例,wc -l计算出现的次数。同样,要计算第二列的唯一出现次数:
-d
' '
-f1
uniq
wc -l
cut -d ' ' -f2- <your_file> | uniq | wc -l
其中,除了-f2-之外,所有参数/命令都相同,-f2-允许您从第二列到最后一列获取(请参见cutman page-f<from>-<to>)。
-f2-
-f<from>-<to>
编辑
根据您的问题的更新,这里有一个关于如何在r中获得您想要的东西的建议:您可以将cut与pipe一起使用:
pipe
df = read.csv(pipe("cut -f1,2- -d ' ' <your_csv_file>"))
这应该会返回一个 Dataframe ,其中的数据可以按您所希望的方式分隔。
2条答案
按热度按时间h79rfbju1#
这不是一个很好的解决方案,但试试这个。将上一条命令的输出通过管道传输到下面的While循环:
ht4b089n2#
如果您想简单地计算每列中的唯一示例,那么最好的选择是使用带有自定义分隔符的
cut
命令。例如,它将是空格分隔符。在这种情况下,您必须考虑在第一个空格之后还有后续空格,例如
Manchester city
。因此,为了计算第一列的唯一出现次数:
其中,
-d
将分隔符设置为空白' '
,-f1
提供第一列;uniq
保留唯一示例,wc -l
计算出现的次数。同样,要计算第二列的唯一出现次数:
其中,除了
-f2-
之外,所有参数/命令都相同,-f2-
允许您从第二列到最后一列获取(请参见cut
man page-f<from>-<to>
)。编辑
根据您的问题的更新,这里有一个关于如何在r中获得您想要的东西的建议:
您可以将
cut
与pipe
一起使用:这应该会返回一个 Dataframe ,其中的数据可以按您所希望的方式分隔。