如何在ID列以外的列中标识在每列末尾指定的年份(跟在各种字符后面),然后将相应的行放置在新数据框中,并将该年份表示为新列,最后得到一个新列,该新列只需从原始列名中删除年份,并消除列名末尾出现的任何下划线?
例如,我想转换一个包含2条记录和5列(分别为col1、col2_1980、col2_1981、col3_1980和col3_1981,其中col1是字符值)的数据框(“a”或“B”)转换成具有4个记录的 Dataframe ,其中对于2个记录COL1 =“a”,对于2个记录COL1 =“b”,然后col2 =“1980”表示每个col1值的1个记录,col2 =“1981”表示每个col1值的1个记录。
如果我可以使用一个公式来捕获年份,那么使用tidyr::separate()可能会有效,如下所示:
substr(colnames(df1),
nchar(colnames(df1)) - 3,
nchar(colnames(df1)))
原件
set.seed(3)
df1 <-
rbind(
data.frame(
col1 = "a",
col2_1_1980 = runif(1),
col2_1_1981 = runif(1),
col3_1_1980 = runif(1),
col3_1_1981 = runif(1)),
data.frame(
col1 = "b",
col2_1_1980 = runif(1),
col2_1_1981 = runif(1),
col3_1_1980 = runif(1),
col3_1_1981 = runif(1)))
col1 col2_1_1980 col2_1_1981 col3_1_1980 col3_1_1981
1 a 0.1680415 0.8075164 0.3849424 0.3277343
2 b 0.6021007 0.6043941 0.1246334 0.2946009
目标
2条答案
按热度按时间qacovj5a1#
pivot_longer()
可以处理名称中的模式/分隔符。使用更新的数据集:
所讨论的原始样本数据包括诸如
col2_1980
和col2_1981
之类的列名,对于那些names_sep
参数很有用的列名:创建于2023年1月18日,使用reprex v2.0.2
6mzjoqzu2#
请尝试下面的代码,使用pivot_longger、pivot_wideer实现预期结果
编号