我有一列不良数据需要标准化。这是一列,所以我只在这里包含其中的一个片段:
pop_density_2010
7002854600000000000854.6/sq mi (329.97/km2)
70031416770000000001,416.77/sq mi (547.04/km2)
70031051960000000001,051.96/sq mi (406.18/km2)
70031822940000000001,822.94/sq mi (703.86/km2)
70031297510000000001,297.51/sq mi (500.99/km2)
70031285070000000001,285.07/sq mi (496.19/km2)
70032087500000000002,087.5/sq mi (806.02/km2)
7002133720000099999133.73/sq mi (51.64/km2)
7002301560000000000301.56/sq mi (116.44/km2)
70031003620000000001,003.62/sq mi (387.51/km2)
7002593900000000000593.9/sq mi (229.31/km2)
7002679689999900000679.68/sq mi (262.44/km2)
7002368120000000000368.12/sq mi (142.14/km2)
70031072369999999991,072.37/sq mi (414.06/km2)
70031343750000000001,343.75/sq mi (518.84/km2)
7002303640000000000303.64/sq mi (117.24/km2)
70031465180000000001,465.18/sq mi (565.73/km2)
7002987180000000000987.18/sq mi (381.17/km2)
7002266330000099999266.33/sq mi (102.83/km2)
7002235830000000000235.83/sq mi (91.06/km2)
7002234160000000000234.16/sq mi (90.41/km2)
7002208440000000000208.44/sq mi (80.48/km2)
7002204020000000000204.02/sq mi (78.78/km2)
7002808690000000000808.69/sq mi (312.25/km2)
7002325910000000000325.91/sq mi (125.84/km2)
7002697710000000000697.71/sq mi (269.4/km2)
7002544740000000000544.74/sq mi (210.33/km2)
在 ruby 中,我的冲动是做这样的事情,假设列转置为一个数组:
array.map{|x| x.split("sq mi (")[1].split("/km2")[0]}
#=> 329.97, 547.92, 406.18, ...
这样我就完成了。但是我现在不在编程环境中,所以现在不太方便。
我希望能够使用 Open Office 或 Excel 做同样的事情,并且不想拿出 VB 来做这件事,因为我不懂 VB。
如果您能在代码中看到它的作用,那就是将给定单元格的字符串划分为一个字符串片段数组,这些字符串片段通过与“sq mi(”字符串的匹配进行拆分,抓取其中的后半部分,然后对“/km2”字符串执行相同的操作,只是反向操作并抓取第一部分。然后我得到了一个很好的简单数字,我可以将其转换为英里或其他数字。谢谢。
答案1
以下公式将从存储在的字符串中提取“km2”数字A1
。
=VALUE(LEFT(RIGHT(A1, LEN(A1)-FIND("sq mi (", A1)-6), FIND("/km2", RIGHT(A1, LEN(A1)-FIND("sq mi", A1)-6))-1))
它与您的程序非常相似。首先,它会截断 之前的所有内容sq mi (
,然后截断 之后的所有内容(包括 )/km2
。整个公式包装在一个VALUE
函数中,以便从文本转换为数字。
答案2
你可以使用 Excel 用户方式,而不是程序员方式 :-) 因此,你可以使用菜单数据然后文本分列命令,使用分隔符选项。您需要执行两次:
- 将命令应用到第一列并用作
(
分隔符——您将收到填充###.##/km2
值的下一列; - 将命令应用到刚刚出现的列并用作
/
分隔符——此列将被清除/km2
,并移动到下一列(第三列)。